反复/同时读写文本文件

3

我如何在读写文本文件时避免出现“文件已被其他应用程序使用”的异常?

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

在我的情况下,哪个函数最好用?我也希望能得到一些代码片段。

谢谢

2个回答

7

这与打开文件时请求的锁定和共享语义有关。

不要使用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 以及其构造函数重载,您可以根据需要精确地调整它的行为。

你的第二个代码块写的是 FileShare.Read,而不是 FileShare.Write - Matt Ellen

1

你需要确保文件没有被其他应用程序使用。

在你自己的应用程序中,你不能在读取之间不关闭流的情况下多次读取文件。

你需要找出文件正在被使用的原因 - 像 FileMon 这样的工具可以帮助你找到答案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接