下面的代码写入while循环中的文本文件,有时它会产生一个错误,指出“进程无法访问该文件,因为它被另一个进程使用”等等...... 该错误通常发生在“使用(FileStream fs = File.OpenRead(filePath))” 有没有办法检查文件是否已被使用或者是否正确处理文本编写器?
if (File.Exists(filePath))
{
TextWriter sud = File.AppendText(filePath);
sud.WriteLine(GenericLIST[testloop].ToString());
sud.Close();
sud.Dispose();
using (FileStream fs = File.OpenRead(filePath))
{
using (StreamReader sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
{
richTextBox1.AppendText(sr.ReadLine());
}
}
}
}
else
{
TextWriter sud = new StreamWriter(filePath);
sud.WriteLine(GenericLIST[testloop].ToString());
sud.Close();
sud.Dispose();
}
答案 0 :(得分:5)
我一直用:
using (StreamReader reader = new StreamReader(new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
{
}
根据MSDN,File.OpenRead与:
相同new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)
(不同之处在于ReadShare与ReadWrite的文件共享)
答案 1 :(得分:1)
使用优秀的ProcMon并将其过滤到对文件执行的所有访问,您应该看到哪些其他进程正在访问该文件。我过去曾经用它来做这件事,这很棒。
http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
答案 2 :(得分:0)
这里发生的是你释放你想要再次阅读的文件。
在sud.Close()
和using(FileStream fs = File.OpenRead(filePath))
之间,您计算机上运行的任何其他进程都可以查看并锁定您的文件。索引服务或反病毒通常会对此产生负责。
尝试禁用该文件夹的索引,并查看您的错误是否仍然频繁发生。
答案 3 :(得分:0)
它对我有用。你在其他地方使用这个文件吗?也许你的代码中有另一个地方缺少Dispose?
我还建议您始终使用using
。有几个地方你没有,抛出异常可能会导致文件无法正确处理。