文件正由另一个进程使用

xbo*_*nez 10 c#

我有一个大致这样做的程序:

  1. 打开一个文件来读取它.
  2. 关闭文件
  3. 启动filewatcher以监视文件中的更改.
  4. 一旦检测到更改,filewatcher的EnableRaisingEvents标志将设置为false,并且该过程将从步骤1开始重复.

问题是,在从第4步到第1步之后,它无法读取文件说它正被另一个进程使用.

我收到错误:

未处理的异常:System.IO.IOException:进程无法访问文件'c:\ test.xml',因为它正由另一个进程使用.

什么出错了?我的程序的第1步的读者是否仍然打开文件,或者是访问该文件的完全不同的进程,还是filewatcher在从4移动到步骤1之后仍在观看文件,尽管将标志设置为false?

Ric*_*III 8

如果您的代码与此类似:

[STAThread]
static void Main(string[] args)
{
    string file = "temp.txt";
    ReadFile(file);
    FileSystemWatcher fswatcher = new FileSystemWatcher(".\\");
    fswatcher.Changed += delegate(object sender, FileSystemEventArgs e)
                             {
                                 ReadFile(e.FullPath);
                             };
    while (true)
    {
        fswatcher.WaitForChanged(WatcherChangeTypes.Changed);
    }
}
private static void ReadFile(string file)
{
    Stream stream = File.OpenRead(file);
    StreamReader streamReader = new StreamReader(stream);
    string str = streamReader.ReadToEnd();
    MessageBox.Show(str);
    streamReader.Close();
    stream.Close();
}
Run Code Online (Sandbox Code Playgroud)

如果您是通过记事本编辑文件,那么,当您单击保存按钮时,它会保持文件打开,就像您只是关闭程序并单击保存它不会.我不知道这是一个bug还是记事本的无证功能,但这可能是你的问题.解决此问题的一种方法是执行以下操作:

在你的匿名委托,或任何你执行调用ReadFile()调用Thread.Sleep(1000)读取文件之前,有计划等待您的代码应正常工作.