2016-04-11 22 views
7

Ich benutze Xamarin.Android und ich möchte eine .txt Datei auf der SD-Karte speichern. Hier ist der Code, den ich verwende:Xamarin android speichern Textdatei

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()); 
      } 
     }  
    } 

Allerdings erhalte ich folgende Fehlermeldung:

System.UnauthorizedAccessException: Access to the path "/mnt/sdcard/iootext.txt" is denied.

ich hinzugefügt habe folgende zu dem Manifest:

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

Wie kann ich den Fehler beheben?

+0

Was haben Sie versucht? Vielleicht ist das Verzeichnis nicht beschreibbar (das beschreibbare Bit ist nicht gesetzt) ​​oder die gesamte SD ist schreibgeschützt. –

+0

Wenn Sie die Berechtigungen nachträglich hinzugefügt haben, versuchen Sie, die App auf Ihrem Gerät zu deinstallieren, das Projekt zu bereinigen und neu zu erstellen. Manchmal werden sie nicht mehr synchronisiert, weil der Build-Prozess versucht, zu optimieren :) –

+0

ich bin installed, aber es half nicht:/ – Wuhu

Antwort

2

Wenn Sie mit Android 6.0 oder höher arbeiten, müssen Sie eine Laufzeitprüfung auf Berechtigungen durchführen.

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

Mehr dazu Informationen finden Sie in der Android-Dokumentation here gefunden werden: Dies kann wie so geschehen.

+1

ich laufe auf 4.0.3 ap15 – Wuhu

0

Wenn die Datei nicht existiert erstellen Sie zuerst, dann erhalten Sie den absoluten Pfad und schreiben Sie Ihre Daten hinein.

 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(); 
     } 
0

ich gleiches Problem hatte und ein paar Stunden, nachdem er, fand ich, dass, wenn Sie auf sdk höher als 23, Android-Version höher als 6 ausführen, sollten Sie Zugriffsanforderung an Benutzern implementieren. Weitere Informationen finden Sie unter this link