2012-08-22 47 views
1

我需要登錄我的應用程序事件和異常的文件在Win 8應用程序中的文件夾FileIO專注於贏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 
       { 

       } 

      } 

回答

2

看來您忘了寫操作後關閉流。 該文件將被鎖定,直到您關閉流。

dataWriter.Close(); 

MSDN Link

或使用「使用」關鍵字是這樣的:

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

這是一個好主意,檢查文件是否被鎖定,所以你沒有得到一個異常。

How to Check for locked file

問候,希望它有助於

+0

試過,但還是一樣的我想將需要排隊的所有任務。 – CognitiveDesire

+0

是的,並行訪問文件很複雜。使用串行訪問更容易:) – Verni

0

,你可以試試下面的

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

試過這個,但仍然相同,我猜將需要排隊所有的任務。 – CognitiveDesire