进程无法访问已打开的文件

本文关键字:文件 访问 进程 | 更新日期: 2023-09-27 18:01:59

运行在wince 5.0/.net framework compact 2.0上的代码
总是得到一个异常表示:

进程不能访问该文件,因为它正在被另一个进程使用。

真的很困惑,因为我已经在using语句中包含了流,所以文件流应该在离开using块后自动关闭。

//read text
using (StreamReader sr = File.OpenText(fname))
{
  string line;
  while ((line = sr.ReadLine()) != null)
  {
    // append into stringbuilder
    sb.Append(line);
    sb.Append("'n");
  }
}
//write text, below code raise the exception. 
//if i comment it and re-run the code,exception disappear
using (StreamWriter sw = File.CreateText(fname))
{
  sw.Write(sb.ToString());
}

补充:我只是想更新文件,读写。有更好的办法吗?

进程无法访问已打开的文件

对不起,这个问题是在我的代码,我在这里混淆了你,因为我不分享代码。
因为我在程序的开头写了这个

// f is the fileinfo which point to fname as well
string text = f.OpenText().ReadToEnd();

这创建了一个流阅读器,没有被分配给任何变量,但它在堆中。所以我忽略了。
谢谢大家的帮助。顺便说一句,把代码改成这个,然后问题就解决了

using (StreamReader sr = f.OpenText())
{
   string text = sr.ReadToEnd();
}

我在我的计算机上测试了这段代码。没有问题。

更好的方法。对于读写完整文件,可以使用File.ReadAllText(fname)File.WriteAllText(fname)。用Environment.NewLine代替'n