使用async/await的文件IO会导致超时和InvalidOperationException
本文关键字:超时 InvalidOperationException IO async await 文件 使用 | 更新日期: 2023-09-27 17:55:03
这是我在这个网站上的第一篇文章,为了让我的代码正常工作,我进行了广泛的搜索。正如标题所说,这是一个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
。
与其从ApplicationData
打开,您可能需要:
Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync
这将获得包的安装文件夹中的文件,而不是Application的Data文件夹。