我有一个打开的文件,比如.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的解决方案并处理异常?
答案 0 :(得分:9)
不幸的是,没有别的办法。
当解锁文件或任何其他方便的文件时,API没有会触发的事件。
使用等待重试是使用当前API的最佳解决方案。
答案 1 :(得分:2)
但是,不要使用你现在拥有的循环,break
如果没有异常 - 在using
循环中执行实际的文件访问。
接下来,如果文件在已知进程中打开,您可以获取其Process
对象,将EnableRaisingEvents
设置为true
,并处理其Exited
事件以尝试再次。但它不是故障安全的,所以你仍然可以处理异常并使用循环。
答案 2 :(得分:0)
您可以对本机CreateFile函数进行P / Invoke调用,然后分析错误代码。但是,仍然需要尝试使用try / catch。