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

書き込み操作後にストリームを閉じるのを忘れたようです。ストリームを閉じるまで、ファイルはロックされます。

dataWriter.Close();

MSDN リンク

または、次のように「using」キーワードを使用します。

 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 に答える