[Xamrin]Internal Strageについては、App内部使用資料にアクセスします.

9344 ワード

最近はアプリを開発していますが、アプリで使われている資料を処理しなければならないので、インターネットでAndroidの作り方を調べてみます.私も含めて実際に作ってみました.Java|Androidについてはよく分かりません.java.lang.illegagagarge metexceptionで間違いが多いです.  この上で、Xamrinフォーラムを調べてみます.http://forums.xamarin.com/discussion/333/how-to-save-a-string-on-internal-isolated-storage-with-mono-for-androidはファイルブックを作る時にも現れます.だから見ました.パリパリはXamrinの特性によってSystem.IOの下の方法で処理します.今日の例を紹介します.
つまり、私は資料をinternal storgeに書き込んで、ルートのnote.txtを設定して読みだしました.その後、私もプレイファイルフォルダを作ってみました.そして、ファイルnote.txtを書いてから読みました.
//  Internal Storage Methods.
 
/// <summary>
///  String   Internal Storage 
/// </summary>
/// <param name="filename"></param>
/// <param name="content"></param>
public void WriteAllText(string filename, string content)
{
 
    //       /    
    if (filename[0] != '/')
    {
        filename = "/" + filename;
    }
 
    //     data/data/[package name]/files
    if (filename.Contains("/"))
    {    
        Directory.CreateDirectory(GetFileStreamPath("") + filename.Substring(0, filename.LastIndexOf('/')));
    }
 
    System.IO.File.WriteAllText(GetFileStreamPath("") + filename, content);
}
 
/// <summary>
///        
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public string ReadAllText(string filename)
{
    try
    {
 
        if (filename[0] != '/')
        {
            filename = "/" + filename;
        }
        return System.IO.File.ReadAllText(GetFileStreamPath("") + filename);
 
 
    }
    catch (Exception ex)
    {
        throw;
    }
 
}
この二つのfunctionは、ファイルフォルダがない場合、自動的に書き込み/読み取りルート/data/data/packagename/files/の部分を作成します.
var btnSave = FindViewById<Button>(Resource.Id.btnSave);
btnSave.Click += delegate
{
    WriteAllText("note.txt", "        !!" + DateTime.Now.ToString());
 
};
 
 
var btnRead = FindViewById<Button>(Resource.Id.btnRead);
btnRead.Click += delegate
{
    try
    {
        var message = ReadAllText("note.txt");
        Toast.MakeText(this, message, ToastLength.Short).Show();
 
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
    }
};
結果:ファイルマネージャで確認する:
  ファイルフォルダに書き込み:
var btnDirWrite = FindViewById<Button>(Resource.Id.btnDirWrite);
btnDirWrite.Click += delegate
{
    try
    {
        WriteAllText(@"play/note.txt", "             !!" + DateTime.Now.ToString());
 
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
    }
};
 
var btnDirRead = FindViewById<Button>(Resource.Id.btnDirRead);
btnDirRead.Click += delegate
{
    try
    {
        var res = ReadAllText(@"play/note.txt");
        Toast.MakeText(this, res, ToastLength.Short).Show();
    }
    catch (Exception ex)
    {
        Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
    }
};
ps.注意してください.基本的にはAPP自体がInternal Strageの部分にアクセスできるので、私の携帯はrootがあるからこそ見られます.伝統的なandroidの書き方で他のアプリにアクセスできる属性MODE_WORLD_WRITEABLE. ,  MODE_WORLD_READABLE 続いて、Android provides a way for you to expose even your prvate data to other appications—with aが公式提案されました.  content provider.A content provider is an optional component that exposes read/write access to your appication data,subject to whatever trication you war more information abont using content viders,see the  Conttent Providers documentation.だから、このような方式で他のAPPと資料を交流することを提案しません.参考資料:  http://developer.android.com/guide/topics/data/data-storage.html http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_WRITEABLE