2016-07-18 66 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();您也可以提供資產中的文件,然後從資產複製到其中一個目錄。 – 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); 
} 
相關問題