it-roy-ru.com

Xamarin Android сохранить текстовый файл

Я использую Xamarin.Android и хочу сохранить файл .txt на SD-карту. Вот код, который я использую:

  private void SavetoSd()
  {
       var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path;
       var filePath = System.IO.Path.Combine(sdCardPath, "iootext.txt");
       if (!System.IO.File.Exists(filePath))
       {
           using(System.IO.StreamWriter write = new System.IO.StreamWriter(filePath,true))
           {
               write.Write(etSipServer.ToString());
           }
       }    
  }

Однако я получаю следующую ошибку:

System.UnauthorizedAccessException: доступ к пути «/mnt/sdcard/iootext.txt» запрещен.

Я добавил следующее в манифест:

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />

Как я могу исправить ошибку?

8
Wuhu

Если вы работаете на Android 6.0+, вам необходимо выполнить проверку прав доступа во время выполнения. Это можно сделать так:

if ((CheckSelfPermission(Permission.ReadExternalStorage) == (int)Permission.Granted) && 
    (CheckSelfPermission(Permission.WriteExternalStorage) == (int)Permission.Granted))

Более подробную информацию об этом можно найти в документации Android здесь .

3
aaron-bond

Если файл не существует, сначала создайте, затем получите абсолютный путь и запишите в него свои данные.

     Java.IO.File sdCard = Android.OS.Environment.ExternalStorageDirectory;
     Java.IO.File dir = new Java.IO.File (sdCard.AbsolutePath + "/MyFolder");
     dir.Mkdirs ();
     Java.IO.File file = new Java.IO.File (dir,"iootext.txt");
        if (!file.Exists ()) {
            file.CreateNewFile ();
            file.Mkdir ();
            FileWriter writer = new FileWriter (file);
            // Writes the content to the file
            writer.Write (jsonData);
            writer.Flush ();
            writer.Close ();
        }
1
Shalva Avanashvili

У меня возникла та же проблема, и, потратив пару часов, я обнаружил, что если вы работаете на SDK выше 23, версия Android выше 6, вы должны реализовать запрос доступа к пользователю. пожалуйста, найдите больше информации здесь это ссылка

0
batmaci