2010-07-20 43 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这样的工具可以帮助找出。