2017-10-18 22 views
0

J'ai besoin d'écriture synchrone sur un fichier, je sais qu'il existe des méthodes pour faire cela asynchrone mais ce n'est pas mon cas. Après avoir navigué à partir d'un autre page.xml je viens à ma page principale et dans la méthode onnavigated j'ai besoin d'écrire dans un fichier.txt un texte que je prends de la page précédente. (c'est comment je pensais à économiser des données d'une première ouverture de l'application et à chaque fois que l'application va ouvrir chargera ces données pour ne pas faire tutoriel plus)écriture synchrone sur un fichier différentes exceptions et accès refusé

protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
Regione = e.Parameter as regione; 
string ciccio = "" + Regione2.RegNome.ToString() + "," + Regione2.RegLat.ToString() + "," + Regione2.regLon.ToString(); 
      //File.WriteAllText("Data/data1.txt", ciccio); 
      File.WriteAllText("C:/Users/giuli/Documents/Source/xxx/XXX/XXX/Data/data1.txt", ciccio); 
} 

et si je tente avec le File.WriteAllText("C:/Users/giuli/Documents/Source/xxx/XXX/XXX/Data/data1.txt", ciccio); Je reçois une exception qui me dit que je ne peux pas utiliser la méthode de synchronisation: "Les opérations synchrones ne doivent pas être effectuées sur le thread de l'interface utilisateur. Envisagez d'enrouler cette méthode dans Task.Run."

ok mais je dois, et je l'ai essayé avec File.WriteAllText("Data/data1.txt", ciccio); et je reçois un System.UnauthorizedAccessException: accès au chemin refusé

et si je tente avec une méthode async

Windows.Storage.StorageFolder installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation; 
      StorageFile File2 = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Data/data1.txt")); 
await Windows.Storage.FileIO.WriteTextAsync(File2, ciccio1); 

je reçois un System.UnauthorizedAccessException: 'Accesso negato

J'ai créé le fichier data.txt via Visual Studio, ce n'est pas ope n sur VS et je pense que personne ne sait que ce fichier existe plutôt que VS.

Comment écrire enfin sur ce fichier?

Merci.)

« la synchronisation de lecture et la méthode async travail parfait il est donc pas un problème sur le chemin Regione.RegNome = File.ReadAllText("Data/data1.txt"); »

Répondre

2

Autre que l'erreur en disant de ne pas appeler API synchrone du thread d'interface utilisateur aucune des autres erreurs que vous avez sont liées à l'API étant synchrone ou asynchrone. Ils ressemblent tous à des erreurs légitimes, car l'application n'a pas accès aux emplacements auxquels elle tente d'écrire.

Utilisez ApplicationData.RoamingSettings pour stocker vos vu-le-tutoriel drapeau. Vous n'avez pas besoin de gérer cela vous-même dans un fichier. Voir Store and retrieve app settings and data pour plus de détails.

Le UnauthorizedAccessException sur ms-appx: ///Data/data1.txt est dû au fait installer l'emplacement d'une application est en lecture seule. Sync vs. async n'est pas pertinent ici: la lecture mais pas l'écriture à partir de cet emplacement devrait fonctionner. L'emplacement d'installation est également partagé entre les utilisateurs, donc même si l'application pouvait écrire ici, ce ne serait pas un bon endroit pour des données spécifiques à l'utilisateur comme un indicateur vu-le-tutoriel. Si vous souhaitez stocker cela dans un fichier spécifique à l'utilisateur accessible en écriture, utilisez ApplicationData.LocalFolder ou RoamingFolder comme décrit dans Store and retrieve app settings and data

L'application n'a pas d'accès direct au dossier Documents. Avec les fonctionnalités appropriées, il peut obtenir un accès sponsorisé à ce dossier via la classe StorageFile, mais l'application n'aura pas d'accès direct à l'aide de System.IO.File.

+0

alors à chaque fois que je veux écrire quelque chose sur un fichier j'ai dû supprimer et remplacer le fichier que j'ai? parce que dans votre lien dire que je dois utiliser pour écrire dans un fichier la même chose que j'ai fait avec "attendre FileIO.WriteTextAsync (sampleFile); et je prends la même erreur d'accès (si j'essaie d'écrire sur mon fichier existant), mais si je crée createfileasync et remplace celui qui existe déjà, il me permet d'écrire dessus. pourquoi est-ce si difficile ?! Je veux juste écrire un couple de mots simples dans un txt ... – Uopo