当我在Windows 8的应用程序启动时读取文件时,文件流没有关闭
本文关键字:文件 读取 Windows 应用程序 启动 | 更新日期: 2023-09-27 18:07:47
我写了一个代码来读取和写入文件。当我在LoadFile方法中使用StreamReader读取文件时,然后下次当我调用SaveFile方法并尝试打开StreamWriter时,我的应用程序无法打开文件并抛出文件流已经在使用的异常。我已经处理了流,但Load方法中的流还没有关闭。下面是代码。请告诉我我做错了什么:
private async Task LoadFile()
{
assetFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(Constants.LocalFolderForLog, CreationCollisionOption.OpenIfExists);
using (Stream streamData = await assetFolder.OpenStreamForReadAsync(LogFile))
{
using (StreamReader writer = new StreamReader(streamData))
{
Logger.Load(writer);
writer.Dispose();
}
streamData.Dispose();
}
}
,保存文件
public static async Task SaveFile()
{
//StorageFolder assetFolder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(Constants.LocalFolderForLog, CreationCollisionOption.OpenIfExists);
//var storageFile = await assetFolder.CreateFileAsync(
// LogFile,
// CreationCollisionOption.OpenIfExists);
using (Stream streamData = await assetFolder.OpenStreamForWriteAsync(LogFile, CreationCollisionOption.ReplaceExisting))
{
using (StreamWriter writer = new StreamWriter(streamData))
{
Logger.Save(writer);
writer.Dispose();
}
streamData.Dispose();
}
}
由于流的异步打开,您可能有一个竞争。
注意,使用异步操作,控制立即返回到调用方(调用LoadFile()
的代码),即使操作仍在后台进行。
在调用第二个Task之前,请确保在第一个Task上执行await
。
你可以在这里找到很好的例子。