C#Windows应用商店应用 - 使用async / await的文件IO导致超时和InvalidOperationException

时间:2013-01-21 17:08:34

标签: c# windows-runtime winrt-async

这是我在这个网站上的第一篇文章,我搜索了我的代码。 就像标题所说,它是一个WinRT应用程序,我在使用File IO时遇到了困难。我想要做的是读取存储在应用程序安装目录中的文件夹中的文本文件,该文件夹包含我将提供给List<>的数据行。

public static async void GetStations()
    {
        try
        {
            using (var stream = await Windows.Storage.ApplicationData.Current.LocalFolder.OpenStreamForReadAsync(@"MyApp\Data\file.txt"))
            {
                using (var streamReader = new StreamReader(stream))
                {
                    while (streamReader.Peek() >= 0)
                    {
                        string line = await streamReader.ReadLineAsync();
                        //do something with 
                    }
                }

            }
        }
        catch (Exception e)
        {
            ...
        }
        finally
        {
            ...
        }
    }

问题是我在尝试运行时遇到文件未找到错误。有人可以帮忙吗?如果您需要我发布更多信息,我可以...... 提前谢谢。

2 个答案:

答案 0 :(得分:3)

如果您将文件作为应用程序包的一部分进行分发,则Package.Current.InstalledLocation是正确的位置。 ApplicationData.Current.LocalFolder仅包含您的应用程序放在那里的文件。

正确的代码是:

public static async void GetStations()
{
    try
    {
        using (var stream = await Windows.ApplicationModel.Package.Current.InstalledLocation.OpenStreamForReadAsync(@"Data\file.txt"))
        {
            using (var streamReader = new StreamReader(stream))
            {
                while (streamReader.Peek() >= 0)
                {
                    string line = await streamReader.ReadLineAsync();
                    //do something with 
                }
            }

        }
    }
    catch (Exception e)
    {
        //...
    }
    finally
    {
        //...
    }
}

该文件必须包含在Data文件夹中的项目中,并且Build Action设置为Content

答案 1 :(得分:0)

您可能需要:

,而不是从ApplicationData开始
Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync

这将获取程序包安装文件夹中的文件,而不是应用程序的 Data 文件夹。