当文件被锁定时,模拟等待文件。在C#中打开
基本上,我和这张海报有同样的问题,但是在C#中: 等待文件可以用Win32读取
更多信息:我们的代码在我们的一个项目中调用File.Open
,当文件已被另一个进程( EDIT:或线程)打开时偶尔会死掉:
FileStream stream = File.Open(m_fileName, m_mode, m_access); /* do stream-type-stuff */ stream.Close();
File.Open
将抛出一个IOException
(当前正在某处悄悄吞下),其HResult
属性为0x80070020
( ERROR_SHARING_VIOLATION
)。 我想做的是:
FileStream stream = null; while (stream == null) { try { stream = File.Open(m_fileName, m_mode, m_access, FileShare.Read); } catch (IOException e) { const int ERROR_SHARING_VIOLATION = int(0x80070020); if (e.HResult != ERROR_SHARING_VIOLATION) throw; else Thread.Sleep(1000); } } /* do stream-type-stuff */ stream.Close();
但是, HResult
是Exception
的受保护成员,无法访问 – 代码无法编译。 是否有另一种访问HResult
,或者可能是我可能用来做我想要的.NET的另一部分?
哦,最后一个警告,这是一个doozy:我只能使用Visual Studio 2005和.NET 2.0。
您可以在catch
子句中调用Marshal.GetHRForException()
来获取错误代码。 无需反思:
using System.Runtime.InteropServices; if (Marshal.GetHRForException(e) == ERROR_SHARING_VIOLATION) ....
不幸的是,你最好的选择是使用reflection。 当然,由于您在尝试之间睡眠1秒,性能成本很可能会被忽视。
上述就是C#学习教程:当文件被锁定时,模拟等待文件。在C#中打开分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/989193.html