2011-10-03 60 views
1

我做的在C#中,Windows窗體編輯器。我想保存在同一個文件文件的「新內容」(「保存」選項通常使用),但我收到IOException異常,[進程無法訪問該文件「文件名」,因爲它正由另一個進程使用。 我有寫入新文件的方法,它的工作原理。如何使用它來覆蓋當前文件。C#改寫/保存當前的文件

編輯: 我使用的BinaryWriter http://msdn.microsoft.com/en-us/library/atxb4f07.aspx

+0

你是如何打開文本文件?這可能只是一個設置覆蓋標誌的情況... –

+2

你可以顯示你現在使用的代碼來保存文件嗎? –

+1

你是如何打開文件的?沒有一些代碼就很難說出了什麼問題。 – ChrisF

回答

5

機會是,當你加載的文件,你沒有關閉FileStream或任何你用來閱讀。總是使用using statement爲您的流(和其他類型實施IDisposable),它不應該是一個問題。 (當然,如果你實際上有文件在一個單獨的應用程序中打開,這是一個不同的問題完全。)

所以不是:

// Bad code 
StreamReader reader = File.OpenText("foo.txt"); 
string data = reader.ReadToEnd(); 
// Nothing is closing the reader here! It'll keep an open 
// file handle until it happens to be finalized 

你應該用更多的東西一樣:

string data; 
using (TextReader reader = File.OpenText("foo.txt")) 
{ 
    data = reader.ReadToEnd(); 
} 
// Use data here - the handle will have been closed for you 

或者理想,使用File該做這一切爲你的方法:

string text = File.ReadAllText("foo.txt"); 
3

檢查,如果你關閉流文件。如果沒有,那麼你會阻止你自己。

1

假設你已經正確關閉您最初用來打開和讀取文件,創建,追加或者根據文件的存在,你應該使用的FileStream構造函數的fileMode參數失敗的流。

一切都取決於你打開的FileStream的方式,在這裏看到:FileStream Constructor (String, FileMode)

如果指定FileMode創建:

指定操作系統應創建一個新的文件。如果 文件已經存在,它將被覆蓋。這需要 FileIOPermissionAccess.Write。 System.IO.FileMode.Create相當於 要求如果文件不存在,使用CreateNew; 否則,請使用截斷。如果該文件已存在但是隱藏文件 ,則引發UnauthorizedAccessException。