在Windows Phone 8中读取文件:值不在预期范围内

Osc*_*dez 1 c# readfile 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

C)

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

按下按钮时会启动此操作.

我不知道发生了什么.

这些文件位于Solution'NewProject'/ NewProject/Assets/Data/*/

and*_*ubi 9

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

尝试以下方式:

StorageFile sFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"Assets\Data\htm\" + fileName + ".htm");

var fileStream = await sFile.OpenStreamForReadAsync();
Run Code Online (Sandbox Code Playgroud)

请注意,您必须@在路径字符串之前放置一个以避免\作为scape字符的解释.

您也可以这样获取文件流:

var fileStream = File.OpenRead("Assets/Data/htm/" + fileName + ".htm");
Run Code Online (Sandbox Code Playgroud)