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

可能重复:
等到文件在.NET中解锁

我有一个打开的文件,如.Doc或.txt,我必须等到用户关闭它。 我已经尝试了这个,根据等待文件在.NET中解锁 :

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的解决方案并处理exception?

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

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

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

但是,一方面,不要使用你现在拥有的循环,如果没有exception就break – 在那个循环中执行你的实际文件访问。

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

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