2017-02-12 7 views
1

Я загружаю xml-файл из установленного местоположения в локальную папку, используя следующий код.Загрузка xml-файла в приложение uwp C#

 // Has the file been copied already? 
     bool blFileExist = false; 
     try 
     { 
      await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml"); 
      // No exception means it exists 
      blFileExist = true; 
     } 
     catch (System.IO.FileNotFoundException) 
     { 
      // The file obviously doesn't exist 
      blFileExist = false; 

     } 
     catch (Exception) 
     { 

     } 

     if (!blFileExist) 
     { 
      try 
      { 
       // Cant await inside catch 
       StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("settings.xml"); 
       await file.CopyAsync(ApplicationData.Current.LocalFolder); 
      } 
      catch (System.IO.FileNotFoundException) 
      { 

      } 
      catch (Exception) 
      { 

      } 
     } 

Затем я загружаю его при необходимости, используя это.

private async void loadSettings() 
    { 
     try 
     { 
      StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml"); 
      using (Stream fileStream = await file.OpenStreamForReadAsync()) 
      { 
       doc = XElement.Load(fileStream); 
      } 

     } 
     catch (System.IO.FileNotFoundException ex) 
     { 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

И наконец, я сохраняю его обратно в локальную папку, используя это.

private async void saveSettings() 
    { 
     try 
     { 
      StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml"); 
      using (Stream fileStream = await file.OpenStreamForWriteAsync()) 
      { 
       //Save URLs 
       doc.Save(fileStream); 
      } 
     } 
     catch (System.IO.FileNotFoundException ex) 
     { 
     } 
     catch (Exception ex) 
     { 
     } 
    } 

Код компилирует, запускает и не производит никаких ошибок, но не работает должным образом. При загрузке файла с помощью кода во втором блоке коды он ступает из кода и восходит к методу, который называет его, как будто бросает ошибку и вступает в блок поймать, когда он достигает линию

using (Stream fileStream = await file.OpenStreamForReadAsync()) 

Не совсем уверен, но я думаю, что это может быть до кодирования и знака порядка байтов. Какие-либо предложения?

Вот этот xml.

<?xml version="1.0" encoding="utf-8" ?> 
    <settings> 
    <feeds> 
     <url name="All">http://services.parliament.uk/calendar/all.rss</url> 
     <url name="CommonsMainChamber">http://services.parliament.uk/calendar/commons_main_chamber.rss</url> 
     <url name="CommonsSelectCommittee">http://services.parliament.uk/calendar/commons_select_committee.rss</url> 
     <url name="CommonsGeneralCommittee">http://services.parliament.uk/calendar/commons_general_committee.rss</url> 
     <url name="CommonsWestminsterHall">http://services.parliament.uk/calendar/commons_westminster_hall.rss</url> 
     <url name="LordsMainChamber">http://services.parliament.uk/calendar/lords_main_chamber.rss</url> 
     <url name="LordsGrandCommittee">http://services.parliament.uk/calendar/lords_grand_committee.rss</url> 
     <url name="LordsSelectCommittee">http://services.parliament.uk/calendar/lords_select_committee.rss</url> 
     <url name="ParliamentaryNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=209</url> 
     <url name="CommonsNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=25366</url> 
     <url name="LordsNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=25367</url> 
     <url name="CommitteeNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=25388</url> 
     <url name="CommonsBriefingPapers">http://researchbriefings.parliament.uk/rssfeed/Commons%20Briefing%20papers</url> 
     <url name="LordsLibraryNotes">http://researchbriefings.parliament.uk/rssfeed/Lords%20Library%20notes</url> 
     <url name="LordsInFocus">http://researchbriefings.parliament.uk/rssfeed/Lords%20In%20Focus</url> 
     <url name="POSTBriefs">http://researchbriefings.parliament.uk/rssfeed/POSTbriefs</url> 
     <url name="POSTNotes">http://researchbriefings.parliament.uk/rssfeed/POSTnotes</url> 
     <url name="EarlyDayMotions">http://www.parliament.uk/g/rss/generic/?pageInstanceId=78055&type=Edms</url> 
    </feeds> 
</settings> 
+0

Когда он попадает в блок catch, что является исключением? –

+0

Что такое содержимое файла settings.xml? – mm8

+0

Кен, как я уже сказал, он не бросает никаких ошибок, о которых я знаю. – luigivampa

ответ

2

Я боюсь, что ваша проблема была в вашем XML-файле. Проверьте значение последнего URL-адреса. Файл XML действительно содержит символ «&».

<url name="EarlyDayMotions">http://www.parliament.uk/g/rss/generic/?pageInstanceId=78055&type=Edms</url> 

Настоящий "&" на его собственных брейков файлов XML.

Вы можете использовать &amp; вместо &, тогда ваш код будет работать.

+0

Легенда, спасибо! – luigivampa