2013-05-08 2 views
0

MSDN 및 기타에서 파일 리소스를로드하는 방법은 응용 프로그램 패키지의 내용을 처리하기위한 ms-appx 및 ms-appdata URI 체계에 대해 설명합니다.Windows 저장소 패키지의 내용에 액세스

http://msdn.microsoft.com/en-us/library/windows/apps/hh781229.aspx

문제는 내가 이미지 파일 이외를로드 할 수있는 방법을 볼 수있다. "오류 HRESULT E_FAIL이 COM 구성 요소에 대한 호출에서 반환되었습니다."XMLReader를 예를 들어,

이 COMException 던져 이러한 URI 스킴 모든 Windows.Storage.PathIO 정적 읽기 방법을 지원하지 않습니다

아마도 URI/사용 오류로 인해 예외가 발생했을 수 있습니다. 실버 라이트가 여러 가지 이유로이 메시지를 던지곤 했었습니다.

누구나 패키지에서 비 이미지 데이터를 읽을 수 있습니까?

루크

답변

0

이제 내 질문에 답변 할 수 있습니다.

var f = Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Data").AsTask().Result; 
var i = f.GetFileAsync("Sample Data.xml").AsTask().Result; 
var s = Windows.Storage.FileIO.ReadTextAsync(i).AsTask().Result; 

var r = System.Xml.XmlReader.Create(new StringReader(s)); 
r.MoveToContent(); 

var x = r.ReadInnerXml(); 

잠깐만 기다려주세요. 단지 실험 코드입니다.

패키지 URI를 받아들이지 않는 XmlReader.Create 메서드에 대한 연결 버그를 제출했습니다. 패키지 URI를 사용하지 않으면 패키지 URI의 요점은 무엇입니까?

0

ms-appx 스키마를 사용하여 모든 WinRT API에서 URI를 허용 할 수 있습니다. 이 (그것도 Stream 대신 전체 파일 내용을로드의 string에 처음부터 직접 읽고)처럼 당신은 당신의 코드를 다시 작성할 수 :

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Data/Sample Data.xml")); 
var stream = await file.OpenStreamForReadAsync(); 
var reader = XmlReader.Create(stream); 
reader.MoveToContent(); 
var result = reader.ReadInnerXml(); 

PathIO 방법도 잘 작동합니다. 방금 시도한이 :

var xml = await PathIO.ReadTextAsync("ms-appx:///Assets/Sample Data.xml"); 
+0

감사합니다 Damir - OpenStreamForReadAsync API를 사용하여 내 원래 노력했지만 주위에 fiddling하면서 변경되었습니다. XmlReader가 ms-appx URI를 가져가는 것이 아니라 몇 시간을 절약했을 것입니다. –