sur*_*ace 5 c# directory drive contention filesystem-access
我正在调试一些对目录路径执行一些存在检查的遗留代码。首先,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;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,第一个检查有一个基于 的额外保护DriveInfo.IsReady。之前网络上的文件访问存在问题,所以我的假设是(同样,这是遗留代码)DirectoryPathB如果DirectoryPathA不可用,则引入它作为替代方案。我不知道为什么没有DriveInfo.IsReady对DirectoryPathB.
即使DirectoryPathA是本地目录(因此不会出现网络中断),上面的代码也会偶尔返回DirectoryPathB. 代码被执行多次并被假定为幂等的,但事实并非如此,这会破坏事情。这只是在几个小时内在某些机器上偶尔发生。我无法重现该问题。
驱动器状态在整个程序执行过程中永远不会改变的假设存在一个基本问题。我明白那个。但是,这段代码在大多数情况下似乎都很好,而且过去一直如此。
什么原因DriveInfo.IsReady是false?
该文件指出
true如果驱动器已准备好;false如果驱动器未准备好。
谢天谢地。备注部分添加
IsReady 指示驱动器是否准备就绪。例如,它指示 CD 是否在 CD 驱动器中或可移动存储设备是否已准备好进行读/写操作。如果您不测试驱动器是否准备好,并且它没有准备好,则使用 DriveInfo 查询驱动器将引发 IOException。
C:\。旧文件指出
线程安全
此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
这是否意味着DriveInfo.IsReady可能是false,如果一些其他线程在同一时间在驱动器上执行某些操作?它甚至有必要的DriveInfo.IsReady是true,以检查是否存在一个目录?
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |