J'utilise Xamarin.Android et je souhaite enregistrer un fichier .txt
sur la carte SD. Voici le code que j'utilise:
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());
}
}
}
Cependant, je reçois le message d'erreur suivant:
System.UnauthorizedAccessException: L'accès au chemin "/Mnt/sdcard/iootext.txt" est refusé.
J'ai ajouté ce qui suit au manifeste:
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
Comment puis-je réparer l'erreur?
Si vous utilisez Android 6.0+, vous devrez effectuer une vérification des autorisations à l'exécution. Cela peut être fait comme suit:
if ((CheckSelfPermission(Permission.ReadExternalStorage) == (int)Permission.Granted) &&
(CheckSelfPermission(Permission.WriteExternalStorage) == (int)Permission.Granted))
Vous trouverez plus d'informations à ce sujet dans la documentation Android ici .
Si le fichier n'existe pas en premier, créez le chemin absolu et écrivez-y vos données.
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 ();
}
J'avais le même problème et après avoir passé quelques heures, je me suis rendu compte que si vous utilisez un disque dur supérieur à 23, la version Android supérieure à 6, vous devez implémenter une demande d'accès à l'utilisateur. s'il vous plaît trouver plus d'informations ici sur this link