2017-02-12 8 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) 
     { 
     } 
    } 

코드가 컴파일되고 실행되며 오류는 발생하지 않지만 예상대로 수행되지 않습니다. 이 코드에서 단계 및 오류를 던지고는 라인에 도달 catch 블록에 스테핑 것처럼를 호출하는 방법에 돌아갑니다 두 번째 코드 블록의 코드를 사용하여 파일을로드 할 때

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