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

标签 c# windows-runtime winrt-async

这是我在这个网站上的第一篇文章,我进行了广泛的搜索以使我的代码正常工作。 正如标题所示,这是一个 WinRT 应用程序,我在文件 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
        {
            ...
        }
    }

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

最佳答案

如果您将文件作为应用程序包的一部分进行分发,则 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

关于C# Windows 应用商店应用程序 - 使用 async/await 的文件 IO 导致超时和 InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14443710/

相关文章:

.net - WinRT C# Metro Play MediaElement 异步

windows-8 - 应用程序在后台时似乎关闭

c# - 如何在 WinRT 应用程序中使用 nUnit 测试?

c# - invalidate 方法有什么作用?

c# - 将换行符附加到字符串的最佳方法,最后一个除外

c# - 数据访问层 - LINQ-To-SQL 和泛型。我可以优化这个吗?

windows - 如何在 Windows 8 中运行后台任务?

Listview 选择显示,无填充且无复选标记

C# 通过变量名获取和设置属性

c# - 如何以编程方式触发 WinRT/C#/XAML 中的按键事件?