我的应用程序中有以下代码:
if (!Directory.Exists(myPath))
Directory.CreateDirectory(myPath);
如果我在常规单元测试中运行它,有时它会通过,有时则不会。该目录始终存在(我确定了这一点,因此从技术上讲,它永远不会由代码“创建”)。但每隔一段时间Directory.Exists(myPath)
回false
,这使得代码尝试创建文件夹,然后我得到一个UnauthorizedAccessException
!
有趣的是,如果我在CreateDirectory
,然后将黄色箭头向上移回测试,测试返回true
!
这是怎么回事?
myPath
is \\nameOfLocalMachine\sharedFolder
。该共享可靠且不断使用....NET 4.0
我刚刚让一个 fiddler 模拟 3000 个顺序请求。 175 失败...全部都有相同的消息:
访问路径“\nameOfLocalMachine\sharedFolder\randomFileName.json”被拒绝
这种事故在 Windows 上很正常。程序在这样的目录上打开一个句柄并指定删除共享。这允许任何人删除该目录,即使该程序正在使用它。在该句柄关闭之前,该目录实际上不会从文件系统中消失。接下来是尝试重新创建该目录无法工作,它仍然存在。 Windows 生成“访问被拒绝”错误,并在 C# 程序中报告 UnauthorizedAccessException。
虽然这听起来像是一个晦涩的功能,everyWindows 中的程序执行此操作。每个进程都有一个默认工作目录,即Environment.CurrentDirectory的值。在这样的目录上创建句柄可确保该目录在程序使用它时不会消失。还有其他情况,FileSystemWatcher 是另一个例子。或者程序忙于迭代目录。反恶意软件和搜索索引器因难以诊断此类错误的来源而臭名昭著。
否则,这是多任务操作系统的标准危险。您不是唯一使用该文件系统的人。不重复删除和创建相同的目录应该是您列表中非常重要的。如果这是绝对必要的那么rename删除目录之前先删除它。您仍然无法删除重命名的目录,但重新创建它不会失败。您可以稍后删除它,下次需要时执行此操作。那么遇到麻烦的几率就会低得多。因为时间过去了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)