情况
我正在调试一些旧代码,这些旧代码对目录路径执行一些存在性检查。首先,检查DirectoryPathA
并返回它是否存在。这应该是通常的情况。如果失败,则检查DirectoryPathB
并返回。 (如果这也失败了,那么其他事情就会发生,而不是这个问题的一部分)。代码如下所示:
if (!string.IsNullOrEmpty(DirectoryPathA))
{
driveInfo = new DriveInfo(DirectoryPathA);
if (driveInfo.IsReady)
{
dInf = new DirectoryInfo(DirectoryPathA);
if (dInf.Exists)
{
return DirectoryPathA;
}
}
}
if (!string.IsNullOrEmpty(DirectoryPathB))
{
dInf = new DirectoryInfo(DirectoryPathB);
if (dInf.Exists)
{
return DirectoryPathB;
}
}
如您所见,第一个检查有一个基于
DriveInfo.IsReady
的附加防护。以前在网络上存在文件访问方面的问题,因此我的假设是(同样,这是旧代码)如果没有DirectoryPathB
,则引入该文件是为了建立DirectoryPathA
作为替代方案。我不知道为什么不对DriveInfo.IsReady
执行这种对DirectoryPathB
的检查。问题
即使
DirectoryPathA
是本地目录(因此也不会造成网络中断),但之上的代码偶尔也会通过返回DirectoryPathB
。该代码执行了几次,并被认为是幂等的,但实际上并非如此,这会破坏代码。这仅在某些机器上几个小时内偶尔发生。我无法重现该问题。
假设有一个基本问题,即在程序执行期间驱动状态永远不会改变。我明白那个。但是,这段代码在大多数情况下似乎都不错,并且已经过去了。
问题
是什么会导致
DriveInfo.IsReady
是false
? 文档说明
不用了,谢谢。备注部分添加
C:\
。 The old documentation指出
这是否意味着如果某个其他线程同时在驱动器上执行某些操作,则
DriveInfo.IsReady
可能是false
?为了检查目录是否存在,
DriveInfo.IsReady
甚至有必要是true
吗? 最佳答案
我遇到了Ntfs文件系统损坏并且触发了Ntfs事件55的情况。此时DriveInfo.isReady()返回false。
关于c# - 是什么导致DriveInfo.IsReady为假?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51149329/