Meilleur auteur de réponses
Sauvegarde et serialisation

Question
-
Bonjours à tous.
Dans une Class "BEE_ELEVES" contenant une méthode permettant d'enregistrer un fichier après sérialisation en XML.
public async void CreationFile(string chemin) { StorageFile fichier = await ApplicationData.Current.LocalFolder.CreateFileAsync(chemin, CreationCollisionOption.OpenIfExists); Stream sw = await fichier.OpenStreamForWriteAsync(); // Sérialisation des données XmlSerializer ser = new XmlSerializer(typeof(BEE_ELEVES)); ser.Serialize(sw, this); // Fermeture du stream await sw.FlushAsync(); }
Ce code fonctionne... J'ai également une méthode qui lit le fichier XML
public async Task<BEE_ELEVES> LectureFile(string chemin) { // Récupération du stream du fichier contenant les données sérialisées StorageFile fichier = await ApplicationData.Current.LocalFolder.CreateFileAsync(chemin, CreationCollisionOption.OpenIfExists); Stream sw = await fichier.OpenStreamForReadAsync(); // Désérialisation des données XmlSerializer deser = new XmlSerializer(typeof(BEE_ELEVES)); BEE_ELEVES mc = (BEE_ELEVES)deser.Deserialize(sw); // Fermeture du stream await sw.FlushAsync(); return mc; }
Lorsque je lance le programme, pour créer le fichier pas de problème.
Lorsque je lance le programme, pour lire le fichier pas de problème.
par contre si je lance le programme, pour créer le fichier et que dans la foulé je souhaite le lire, une exception est déclenché.
- Une exception de type 'System.UnauthorizedAccessException' s'est produite dans mscorlib.dll mais n'a pas été gérée dans le code utilisateur
Informations supplémentaires : Accès refusé. (Exception de HRESULT : 0x80070005 (E_ACCESSDENIED))
Le fichier après écriture semble être en lecture seule.
Une idée ????
- Une exception de type 'System.UnauthorizedAccessException' s'est produite dans mscorlib.dll mais n'a pas été gérée dans le code utilisateur
Réponses
-
Bonjour,
oui une première petite idée: libérez le Stream avec un sw.Dispose();
Ensuite j'ai évité dans mon programme de retourner un void sur une fonction avec 'async'. La raison est que quand on utilise un retour void, cette fonction n'attend pas la fin de l'execution. alors qu'en utilsant un type de retour (bool par exemple) la fonction sort à la fin de l'opération.
Dans votre cas, si vous créez et lisez dans la foulée il est possible qu'il n'ai pas finis d'écrire que vous tentiez d'ouvrir en lecture. Ce qui expliquerait votre code d'erreur.
JMK
- Marqué comme réponse Softeur du dimanche samedi 5 juillet 2014 15:57
Toutes les réponses
-
Bonjour,
oui une première petite idée: libérez le Stream avec un sw.Dispose();
Ensuite j'ai évité dans mon programme de retourner un void sur une fonction avec 'async'. La raison est que quand on utilise un retour void, cette fonction n'attend pas la fin de l'execution. alors qu'en utilsant un type de retour (bool par exemple) la fonction sort à la fin de l'opération.
Dans votre cas, si vous créez et lisez dans la foulée il est possible qu'il n'ai pas finis d'écrire que vous tentiez d'ouvrir en lecture. Ce qui expliquerait votre code d'erreur.
JMK
- Marqué comme réponse Softeur du dimanche samedi 5 juillet 2014 15:57
-
Super ... Ça fonctionne pour le sw.Dispose(); Merci beaucoup.
Quand je dis dans la foulée, en fait, c'est dans la même session du programme.
Par contre une fonction 'async' ne permet pas un retour du type 'bool', les seuls retours acceptés sont
'void', 'Task' et 'Task<T>'...
Encore Merci.
- Marqué comme réponse Softeur du dimanche samedi 5 juillet 2014 15:57
- Non marqué comme réponse Softeur du dimanche samedi 5 juillet 2014 15:57