C# win 8应用程序中的FileIO

C# win 8应用程序中的FileIO,c#,windows-8,C#,Windows 8,我必须将我的应用程序事件和异常记录在win 8应用程序文档文件夹中的一个文件中 Windows.Storage.StorageFolder localFolder = KnownFolders.DocumentsLibrary; 问题是,当我一个接一个地调用WriteToFile函数时,会出现访问被拒绝异常,因为该文件仍在使用中。 有没有办法让这一切顺利 public async void WriteToFile(string log) {

我必须将我的应用程序事件和异常记录在win 8应用程序文档文件夹中的一个文件中

Windows.Storage.StorageFolder localFolder = KnownFolders.DocumentsLibrary;
问题是,当我一个接一个地调用WriteToFile函数时,会出现访问被拒绝异常,因为该文件仍在使用中。 有没有办法让这一切顺利

public async void WriteToFile(string log)
            {
                try
                {

                    StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt", CreationCollisionOption.OpenIfExists);
                    //StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
                    IRandomAccessStream writeStream = await sampleFile.OpenAsync(FileAccessMode.ReadWrite);
                    IOutputStream outputStream = writeStream.GetOutputStreamAt(writeStream.Size);
                    DataWriter dataWriter = new DataWriter(outputStream);
                    dataWriter.WriteString(log);

                    dataWriter.StoreAsync().AsTask().Wait();
                    outputStream.FlushAsync().AsTask().Wait();

                }
                finally
                {

                }

            }

看起来您在写操作后忘记关闭流。 文件将被锁定,直到您关闭流

dataWriter.Close();

或者像这样使用“using”关键字:

 using(DataWriter dataWriter = new DataWriter(outputStream)) 
 {
       dataWriter.WriteString(log);
       dataWriter.StoreAsync().AsTask().Wait(); 
 }
检查文件是否已锁定是一个好主意,这样您就不会出现异常


您好,希望有帮助

您可以尝试以下方法

dataWriter.Dispose();
await outputStream.FlushAsync();
await stream.FlushAsync();

我试过了,但还是一样,我想需要把所有的任务排成队列。是的,对文件的并行访问很复杂。使用串行访问更容易:)尝试了这个,但仍然是一样的,我想需要将所有任务排队。