2016-04-11 18 views
7

Sto usando Xamarin.Android e voglio salvare un file .txt sulla scheda SD. Ecco il codice che sto usando:Xamarin android salva il file di testo

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

Tuttavia, ricevo il seguente errore:

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

ho aggiunto quanto segue per il manifesto:

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

Come posso correggi l'errore?

+0

Che cosa hai provato? Forse la dir non è scrivibile (il bit scrivibile non è impostato) o l'intera SD è montata in sola lettura. –

+0

Se in seguito sono state aggiunte le autorizzazioni, provare a disinstallare l'app sul dispositivo, pulire il progetto e ricostruirlo. A volte sono fuori sincrono, perché il processo di compilazione cerca di ottimizzare :) –

+0

non disinstallato ma non aiutato:/ – Wuhu

risposta

2

Se sei su Android 6.0+ dovrai eseguire un controllo di runtime per le autorizzazioni. Questo può essere fatto in questo modo:

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

Ulteriori informazioni su questo si possono trovare nella documentazione di Android here.

+1

corro su 4.0.3 ap15 – Wuhu

0

Se il file non esiste prima creare, quindi ottenere il percorso assoluto e scrivere i dati in esso.

 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

ho avuto lo stesso problema e dopo aver trascorso qualche ora, ho scoperto che se si esegue su SDK superiore a 23, versione di Android superiore a 6, è necessario implementare richiesta di accesso per l'utente. per favore trova più informazioni qui su this link