0

J'ai créé un nouveau fichier en utilisant XmlSerializer et StreamWriter pour conserver les données. De l'essai que j'ai fait avec mon application, le stockage et la restauration des données en utilisant cette méthode fonctionne. Juste pour la curiosité, j'ai essayé de trouver le fichier créé dans le système de fichiers Android, sans succès. J'ai essayé de le trouver avec une application Android (ES File Explorer) et une application de bureau (sur Mac, Android File Transfer). Dans les deux cas, je n'ai pas pu trouver le fichier créé.Recherche d'un fichier enregistré à partir de mon application dans le système de fichiers Android

 XmlSerializer xmlSerializer = new XmlSerializer (typeof(GAData)); 
     TextWriter writer = new StreamWriter (FilePath); 

     xmlSerializer.Serialize (writer, this); 
     writer.Close(); 
     Console.WriteLine ("Data saved"); 

Où est CheminFichier définir ici:

 // Determining the path 
     var documentsPath = Environment.GetFolderPath (Environment.SpecialFolder.Personal); 
     FilePath = Path.Combine (documentsPath, "AppData.txt"); 
     Console.WriteLine (Path.GetFullPath (FilePath)); 

Le dernier Console.WriteLine est l'exploitation forestière: /data/data/com.domain.myapp/files/AppData.txt

L'exacte Le même code fonctionne comme un charme sur iOS, et je peux voir le fichier dans le système de fichiers en utilisant une application sur mon Mac. Pourquoi puis-je le trouver dans le système de fichiers Android? Ou, où est-il sauvé si c'est ailleurs?

Répondre

1
/data/data/com.domain.myapp/files/AppData.txt 

C'est la mémoire interne privée . Privé car seul votre application a accès.

Votre application peut l'atteindre en utilisant getFilesDir().

Une autre application comme ES File Explorer n'a pas d'accès.

0

Vous devez utiliser FilesDir de la ContextWrapper

Path.Combine(FilesDir.Path , "MyFile.text"); 

exemple, copie un fichier qui se trouve dans l'actif dossier au système de fichiers local

if (!File.Exists(Path.Combine(FilesDir.Path , "myFile.Text"))) 
      { 
       using (var asset = Assets.Open("TextToCopyTo.txt")) 
       { 
        using (var dest = File.Create(Path.Combine(FilesDir.Path , "MyFile.text"))) 
        { 
         asset.CopyTo(dest); 
        } 
       } 
      } 
+0

FilesDir ne fonctionne pas. J'ai essayé d'intégrer votre code dans le mien, mais je n'arrive pas à le faire fonctionner. Quoi qu'il en soit, je suis sûr que Environment.SpecialFolder.Personal est le bon moyen de faire ce que je veux. – Boris88

+0

@ Boris88 http://developer.android.com/training/basics/data-storage/files.html#WriteInternalStorage qui recommande d'utiliser filesDir. Assurez-vous d'avoir les permissions correctes. – InitLipton

+0

J'utilise Environment.SpecialFolder.Personal pour réutiliser le code d'Android vers iOS. De la documentation de Xamarin, il est censé fonctionner (et c'est!). Le seul "problème", c'est que je suis errant pourquoi je peux le trouver dans le répertoire de fichiers montré dans le Console.WriteLine() de mon code. En outre, j'ai l'autorisation de lire et écrire sur le stockage externe dans mon AndroidManifest.xml – Boris88