Чтение файлов в Windows Phone 8: значение не попадает в ожидаемый диапазон
У меня действительно проблемы при открытии файлов, хранящихся в моем проекте. Мне нужно открыть некоторые файлы (pdf, html,...) и всегда возникает одна и та же проблема: значение не попадает в ожидаемый диапазон.
Я пробовал несколько способов:
а)
private async Task<string> ReadFileContentsAsync(string fileName)
{
StorageFolder foldera = ApplicationData.Current.LocalFolder;
try
{
Stream filea = await foldera.OpenStreamForReadAsync("/Assets/Data/htm/" + fileName + ".htm");
...
}
catch (Exception e)
{
Debug.WriteLine("ERROR ReadFileContentsAsync " + e.Message);
return null;
}
}
б)
private async Task<string> ReadFileContentsAsync(string fileName)
{
try
{
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(
new Uri("ms-appdata:///Assets/Data/htm/" + fileName + ".htm", UriKind.RelativeOrAbsolute));
...
}
catch (Exception e)
{
Debug.WriteLine("ERROR ReadFileContentsAsync " + e.Message);
return null;
}
}
с)
StorageFile file2 = await StorageFile.GetFileFromApplicationUriAsync(
new Uri("ms-appdata:///Assets/Data/pdf/lc_dossier_acceso_castellana.pdf", UriKind.Absolute));
Эти действия запускаются, когда я нажимаю кнопку.
Я не знаю, что случилось.
Файлы находятся в Solution'NewProject'/NewProject/Assets/Data/*/
1 ответ
Решение
Я заметил, что получаю эту ошибку, если я использую shash /
в пути к файлу. Вместо этого, если я использую обратную косую черту \
Я могу получить файлы.
Попробуйте следующим образом:
StorageFile sFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"Assets\Data\htm\" + fileName + ".htm");
var fileStream = await sFile.OpenStreamForReadAsync();
Обратите внимание, что вы должны разместить @
перед строкой пути, чтобы избежать интерпретации \
как персонаж пейзажа.
Вы также можете получить поток файлов следующим образом:
var fileStream = File.OpenRead("Assets/Data/htm/" + fileName + ".htm");