重复/同时读/写文本文件

时间:2010-07-20 07:35:21

标签: c# file-io filestream

如何读取和写入文本文件而不会出现“文件已被其他应用程序使用”的异常?

我尝试过File.readalltext()和File.Appendalltext()函数。我刚开始使用filestream。

哪种情况在我的情景中效果最好?我也很感激一些代码snipplets ..

由于

2 个答案:

答案 0 :(得分: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及其构造函数重载,您可以准确定制其行为以适合您的目的。

答案 1 :(得分:1)

您需要确保该文件未被任何其他应用程序使用。

使用您自己的应用程序,如果不在读取之间关闭流,则无法多次读取文件。

您需要找到为什么该文件正在使用中 - 像FileMon这样的工具可以帮助您查找。