2013-05-08 2 views
0

Статья «Как загрузить файловые ресурсы» на MSDN и другие, обсудите схемы URI ms-appx и ms-appdata для адресации содержимого в пакете приложений.Доступ к содержимому в пакете Windows Store

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 со всеми API-интерфейсами WinRT, принимающими 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

Thanks Damir - используя API OpenStreamForReadAsync, было мое первоначальное усилие, но я поменял его во время игры. Жаль, что XmlReader не просто принимает URI ms-appx, он бы сэкономил пару часов. –

Смежные вопросы