1

打开存储在我的项目中的文件时,我真的很麻烦。我需要打开一些文件(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;
    }
}

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

当我按下按钮时会启动此操作。

我不知道发生了什么事。

这些文件位于解决方案'NewProject'/NewProject/Assets/Data/*/

4

1 回答 1

11

我注意到如果我/在文件路径中使用斜杠,我会收到该错误。相反,如果我使用反斜杠,\我可以获得文件。

尝试以下方式:

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");
于 2013-07-18T14:45:14.017 回答