Чтение файлов в Windows Phone 8: значение не соответствует ожидаемому диапазону

У меня действительно проблемы при открытии файлов, хранящихся в моем проекте. Мне нужно открыть несколько файлов (pdf, html,...), и у меня постоянно возникает одна и та же проблема: Значение не попадает в ожидаемый диапазон.

Я пробовал несколько способов:

a)

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;
    }
}

b)

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;
    }
}

c)

StorageFile file2 = await StorageFile.GetFileFromApplicationUriAsync(
                                            new Uri("ms-appdata:///Assets/Data/pdf/lc_dossier_acceso_castellana.pdf", UriKind.Absolute));

Эти действия запускаются, когда я нажимаю кнопку.

Я не знаю, что случилось.

Файлы находятся в Solution'NewProject'/NewProject/Assets/Data/*/


person Oscar Fernandez    schedule 18.07.2013    source источник


Ответы (1)


Я заметил, что получаю эту ошибку, если использую косую черту / в пути к файлу. Вместо этого, если я использую обратную косую черту \, я могу получить файлы.

Попробуйте следующим образом:

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");
person anderZubi    schedule 18.07.2013
comment
спасибо, var fileStream = File.OpenRead(Assets/Data/htm/ + fileName + .htm); работает!! - person Oscar Fernandez; 19.07.2013