好好又干净的方式等待文件关闭

时间:2011-09-09 19:04:36

标签: c# .net file

  

可能重复:
  Wait until file is unlocked in .NET

我有一个打开的文件,比如.Doc或.txt,我必须等到用户关闭它。 根据{{​​3}}:

,我已经尝试过了
while (true)
{
    try
    {
      using (FileStream Fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None, 100))
        {
            //the file is close
            break;
        }
    }
    catch (IOException)
    {
        //wait and retry
        Thread.Sleep(1000);
    }
}

这很好用,但是有可能找到没有try / catch的解决方案并处理异常?

3 个答案:

答案 0 :(得分:9)

不幸的是,没有别的办法。

当解锁文件或任何其他方便的文件时,API没有会触发的事件。

使用等待重试是使用当前API的最佳解决方案。

答案 1 :(得分:2)

但是,不要使用你现在拥有的循环,break如果没有异常 - 在using循环中执行实际的文件访问。

接下来,如果文件在已知进程中打开,您可以获取其Process对象,将EnableRaisingEvents设置为true,并处理其Exited事件以尝试再次。但它不是故障安全的,所以你仍然可以处理异常并使用循环。

答案 2 :(得分:0)

您可以对本机CreateFile函数进行P / Invoke调用,然后分析错误代码。但是,仍然需要尝试使用try / catch。