2013-01-10 55 views
1

可能重複:
File being used by another process after using File.Create()IOException異常在創建文件,然後試圖訪問它

我有一個將文本追加到文件的方法。在追加文本之前,我檢查文件是否存在。如果它不存在,我創建它然後繼續如下所示。

if(!File.Exists(_someFile)) 
    File.Create(_someFile); 

using (StreamWriter file = File.AppendText(_someFile)) 
{   
    file.WriteLine("some text"); 
} 

如果文件存在沒有問題。該文件將被更新。如果該文件不存在並且它被創建,則使用'using'命令會拋出IO異常,表明另一個進程正在使用該文件。我試圖使用進程資源管理器來找出使用該文件的內容,結果是「不存在的進程」。 有誰知道發生了什麼事以及如何解決這個問題?

編輯:問題解決

當我第一次搜查我找不到關於我對這個網站的問題的問題。只要我發佈我的問題,我就看到了正確的問題在右側的「相關問題」中解決。 鏈接到解決方案:File being used by another process after using File.Create() 對不起,發佈重複。 我的問題解決了。

回答

6

發生這種情況是因爲File.Create(_someFile);會打開必須關閉的文件流,然後才能使用新創建的文件。 試試這個:

if(!File.Exists(_someFile)) 
{ 
    using (var stream = File.Create(_someFile)) 
} 
using (StreamWriter file = File.AppendText(_someFile)) 
{   
    file.WriteLine("some text"); 
} 

但實際上你不需要先檢查和創建文件。 StreamWriter將創建該文件,如果它不存在或將文本追加到它,如果它存在。

using (StreamWriter sw = new StreamWriter(_someFile, true)) 
{ 
    file.WriteLine("some text"); 
} 
1

弗拉德的答案是正確的。既然你要創建的文件,如果不存在,追加到它,如果它存在,這裏是簡單的解決辦法:

 string _someFile = @"C:\somefile.txt"; 
     TextWriter tw = new StreamWriter(_someFile, true); // append == true 
     tw.WriteLine("some text"); 
     tw.Close(); 
相關問題