Meilleur auteur de réponses
Ecriture et lecture d'un fichier xml

Question
-
Bonjour,
J'essaye de sauvegarder un fichier xml téléchargé dans mon application.
Je reçoit bien le fichier donc le problème vient soit de la sauvegarde soit de la récupération. Voici mon code :
async protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); bool result = await CheckIfUpdateAvailable(); if (result) { Debug.WriteLine("mise à jour du xml"); await DownloadFile("http://..........", XML_FILENAME); } ShowXmlNews(); } private async Task<bool> CheckIfUpdateAvailable() { HttpClient httpClient = new HttpClient(); string resultKey = await httpClient.GetStringAsync("http://..........."); IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings; if (!appSettings.Contains("key")) { Debug.WriteLine("fichier xml jamais récupéré"); appSettings.Add("key", resultKey); return true; } string savedKey = appSettings["key"].ToString(); if (savedKey.Equals(resultKey)){ Debug.WriteLine("fichier xml à jour"); return false ; }else { Debug.WriteLine("fichier xml expiré"); appSettings.Add("key", resultKey); return true ; } } public async Task DownloadFile(String url, string fileName) { HttpClient httpClient = new HttpClient(); string resultXml = await httpClient.GetStringAsync(url); IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication(); StreamWriter writer = new StreamWriter(ISF.CreateFile(fileName)); writer.Write(resultXml); writer.Close(); } } private void ShowXmlNews() { IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication(); if (isoStore.FileExists(XML_FILENAME)) { using (IsolatedStorageFileStream isoStream = isoStore.OpenFile(XML_FILENAME, FileMode.Open)) { using (StreamReader reader = new StreamReader(isoStream)) { Console.WriteLine(reader.ReadToEnd()); string xlmText = reader.ReadToEnd(); ParseXmlFile(xlmText); } } } }
Lorsque j'inspecte :
string xlmText = reader.ReadToEnd();
celui-ci est vide.
Merci de votre aide
Florian R SAS
- Modifié Florian R SAS mercredi 21 janvier 2015 16:04 masquage des url
Réponses
-
Bonjour, Florian R SAS,
Après le premier appel de ReadToEnd(); la position actuelle atteint la fin du flux. Le deuxième appel retourne une chaîne vide. Vous pouvez consultez l’article MSDN: StreamReader.ReadToEnd, méthode
Donc vous pouvez définir auparavant la variable xmlText et la passer comme paramètre de Console.WriteLine:
using (StreamReader reader = new StreamReader(isoStream)) { string xlmText = reader.ReadToEnd(); Console.WriteLine(xlmText); ParseXmlFile(xlmText); }
Vous pouvez aussi utiliser la méthode DiscardBufferedData pour lire de nouveau:
using (StreamReader reader = new StreamReader(isoStream)) { Console.WriteLine(reader.ReadToEnd()); reader.DiscardBufferedData(); reader.BaseStream.Seek(0, SeekOrigin.Begin); string xlmText = reader.ReadToEnd(); ParseXmlFile(xlmText); }
Vous pouvez consultez: StreamReader.DiscardBufferedData, méthode
Cordialement,
Dimitar
- Modifié Dimitar DenkovMicrosoft contingent staff, Moderator jeudi 22 janvier 2015 15:07
- Marqué comme réponse Florian R SAS jeudi 22 janvier 2015 15:19
Toutes les réponses
-
Bonjour, Florian R SAS,
Après le premier appel de ReadToEnd(); la position actuelle atteint la fin du flux. Le deuxième appel retourne une chaîne vide. Vous pouvez consultez l’article MSDN: StreamReader.ReadToEnd, méthode
Donc vous pouvez définir auparavant la variable xmlText et la passer comme paramètre de Console.WriteLine:
using (StreamReader reader = new StreamReader(isoStream)) { string xlmText = reader.ReadToEnd(); Console.WriteLine(xlmText); ParseXmlFile(xlmText); }
Vous pouvez aussi utiliser la méthode DiscardBufferedData pour lire de nouveau:
using (StreamReader reader = new StreamReader(isoStream)) { Console.WriteLine(reader.ReadToEnd()); reader.DiscardBufferedData(); reader.BaseStream.Seek(0, SeekOrigin.Begin); string xlmText = reader.ReadToEnd(); ParseXmlFile(xlmText); }
Vous pouvez consultez: StreamReader.DiscardBufferedData, méthode
Cordialement,
Dimitar
- Modifié Dimitar DenkovMicrosoft contingent staff, Moderator jeudi 22 janvier 2015 15:07
- Marqué comme réponse Florian R SAS jeudi 22 janvier 2015 15:19
-