2010-07-20 93 views
3

如何在文本文件上讀取和寫入而不會出現「文件已被另一個應用程序使用」的異常?重複/同時讀取/寫入文本文件

我試過File.readalltext()和File.Appendalltext()函數..我剛開始用filestream。

哪種方法可以在我的方案中發揮最佳效果?我將不勝感激一些代碼snipplets太..

感謝

回答

6

這與打開文件時請求的鎖定和共享語義有關。

而不是使用File.ReadAllText()的快捷方式,請嘗試使用System.IO.FileStreamSystem.IO.StreamReader/System.IO.StreamWriter

打開一個文件:

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var streamReader = new StreamReader(fileStream)) 
{ 
    var someText = streamReader.ReadToEnd(); 
} 

注意FileShare.ReadWrite - 這是告訴流允許共享要麼其他讀者或其他作家。

對於寫作嘗試像

using (var fileStream = new FileStream(@"c:\myFile", FileMode.Create, FileAccess.Write, FileShare.Read)) 
using (var streamWriter = new StreamWriter(fileStream)) 
{ 
    streamWriter.WriteLine("some text"); 
} 

注意FileShare.Read - 這是告訴流允許共享只讀者。

請仔細閱讀System.IO.FileStream及其構造函數重載,並且可以根據您的目的準確定製它的行爲方式。

+0

你的第二個代碼塊表示'FileShare.Read',而不是'FileShare.Write' – 2010-07-20 08:02:56

+0

@Matt Ellen。更正 - 謝謝。 – 2010-07-20 08:20:45

1

您需要確保該文件不被任何其他應用程序。

使用您自己的應用程序,您無法多次讀取文件而無需在讀取之間關閉流。

你需要找出爲什麼該文件正在使用 - 類似FileMon這樣的工具可以幫助找出。