当我在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();
            }
        }

当我在Windows 8的应用程序启动时读取文件时,文件流没有关闭

由于流的异步打开,您可能有一个竞争。
注意,使用异步操作,控制立即返回到调用方(调用LoadFile()的代码),即使操作仍在后台进行。

在调用第二个Task之前,请确保在第一个Task上执行await

你可以在这里找到很好的例子。