1

我必须将我的应用程序事件和异常记录在文档文件夹中 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
                {

                }

            }
4

2 回答 2

2

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

dataWriter.Close();

MSDN 链接

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

 using(DataWriter dataWriter = new DataWriter(outputStream)) 
 {
       dataWriter.WriteString(log);
       dataWriter.StoreAsync().AsTask().Wait(); 
 }

检查文件是否被锁定是个好主意,这样您就不会遇到异常。

如何检查锁定的文件

问候,希望对你有帮助

于 2012-08-22T12:02:35.723 回答
0

你可以尝试以下

dataWriter.Dispose();
await outputStream.FlushAsync();
await stream.FlushAsync();
于 2012-08-22T12:50:56.870 回答