2013-05-08 291 views
0

文章「如何加載文件資源」在MSDN和其他人,討論MS-APPX和MS-應用程序數據URI方案在應用程序包的尋址內容。訪問內容

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

的問題是,我看不到任何方式來加載除圖像文件以外的任何東西。 XMLReader可以,例如,不支持這些URI方案和所有Windows.Storage.PathIO靜態讀方法都拋出

收到COMException:「錯誤HRESULT E_FAIL已經從COM組件的調用返回。」

可能是異常是由錯誤的URI /使用錯誤引起的。我知道Silverlight用於出於各種原因拋出此消息。

有沒有人能夠從他們的包中讀取非圖像數據?

Luke

回答

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(); 

請原諒缺乏等待,它只是實驗性的代碼。

我提起連接錯誤的XmlReader.Create方法不接受一個包URI - 它不應該這麼難,什麼是一個包URI如果沒有使用它的點。

0

您可以使用ms-appx方案與所有的WinRT API的接受的URI。你可以重寫你的代碼是這樣的(這也直接而不是加載完整的文件內容Streamstring首先讀取):

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

謝謝達米爾 - 使用OpenStreamForReadAsync API是我原來的努力,但我在擺弄時改變了它。 XmlReader不僅僅採用ms-appx URI,這會讓人感到遺憾,會節省幾個小時。 – 2013-05-09 09:59:54