2016-07-18 5 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

'In"/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); 
} 
Смежные вопросы