2016-07-18 47 views
0

私はjsonファイルを持っていて、読み書きできます。まず、資産から読み込もうとしましたが、実行時に書き込むことはできません。それから私はこれをしました:jsonファイルはどこに置くことができますか

string path = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; 
string fileName = Path.Combine(path.ToString(), "myFile.json"); 

if(File.Exist(fileName)){ 
    //do something 
} else { 
    File.Create(fileName); 
    Path.GetDirectoryName(fileName); //This returns "/storage/sdcard0" 
} 

しかし、私はjsonファイルをどこに置くべきですか? "/ storage/sdcard0"にありますか?それはどこにある?

+0

。 –

+0

ファイルをgetExternalStorageDirectory()、getFilesDir()およびgetExternalFilesDir()に配置できます。ファイルをアセットで提供し、アセットからそれらのディレクトリの1つにコピーすることもできます。 – greenapps

+0

''/storage/sdcard0 'にありますか?それはどこですか? 'そのディレクトリにファイルを書き込むと、ファイルはそのディレクトリにあります。 "/ storage/sdcard0"にあります。他にどこ ?奇妙な質問。 – greenapps

答えて

0

ブレークポイントを設定してパス変数の値を調べることはできますか? このようにして、jsonファイルが保存される実際のパスを取得できます。

1

最善の解決策は、資産へmyFile.jsonファイルをバンドルすることで、アプリを初めて起動したときに書き込み可能な場所にコピーします:

次のコードは、あなたのためのヘルパークラスを提供します。

public class FileAccessHelper 
    { 
     public static string GetLocalFilePath(string filename) 
     { 
      string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); 
      string o= Path.Combine(path, filename); 
      return o; 
     } 

     public static void CopyAssetFile(string path, string fileName) 
     { 
      using (var br = new BinaryReader(Application.Context.Assets.Open(fileName))) 
      { 
       using (var bw = new BinaryWriter(new FileStream(path, FileMode.Create))) 
       { 
        byte[] buffer = new byte[2048]; 
        int length = 0; 
        while ((length = br.Read(buffer, 0, buffer.Length)) > 0) 
        { 
         bw.Write(buffer, 0, length); 
        } 
       } 
      } 
     } 
    } 

だから、メインのアクティビティでは、このようにそれを使用することができます:ルートディレクトリに

var path = FileAccessHelper.GetLocalFilePath("myFile.json"); 
if (File.Exists(path)) 
{ 
    CopyDatabase(path, myFile.json); 
} 
関連する問題