好好又干净的方式等到文件关闭
可能重复:
等到文件在.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。