gpt4 book ai didi

c# - Directory.Exists 对时间敏感吗?

转载 作者:行者123 更新时间:2023-11-30 22:01:27 24 4
gpt4 key购买 nike

我的应用程序中有以下代码:

if (!Directory.Exists(myPath))
Directory.CreateDirectory(myPath);

如果我在常规单元测试中运行它,有时它会通过,有时不会。该目录始终存在(我确定了它,所以从技术上讲它永远不会被代码“创建”)。但每隔一段时间 Directory.Exists(myPath) 返回 false,这使得代码尝试创建文件夹然后我得到一个 UnauthorizedAccessException!

这里有趣的是,如果我在 CreateDirectory 上放置一个断点,然后将黄色箭头向上移回测试,测试返回 true!

这是怎么回事?

myPath\\nameOfLocalMachine\sharedFolder。该共享可靠且经常使用... .NET 4.0

我刚刚让 fiddler 模拟了 3000 个顺序请求。 175 次失败...都显示相同的消息:

Access to the path '\nameOfLocalMachine\sharedFolder\randomFileName.json' is denied

最佳答案

这种事故在 Windows 上很正常。程序打开这样一个目录的句柄并指定删除共享。这允许任何人删除目录,即使程序正在使用它。在该句柄关闭之前,该目录实际上不会从文件系统中消失。接下来是尝试重新创建该目录是行不通的,它仍然存在。 Windows 生成“拒绝访问”错误,在您的 C# 程序中报告 UnauthorizedAccessException。

虽然这听起来像是一个不起眼的功能,但 Windows 中的每个程序都这样做。每个进程都有一个默认工作目录,即 Environment.CurrentDirectory 的值。在这样的目录上创建句柄可确保在程序使用它时它不会消失。还有其他情况,FileSystemWatcher 是另一个例子。或者程序忙于迭代目录。反恶意软件和搜索索引器因难以诊断此类错误的来源而臭名昭著。

否则多任务操作系统的标准危害。您不是唯一使用该文件系统的人。不要重复删除和创建相同的目录应该在您的列表中非常重要。如果这是绝对必要的,那么在删除目录之前先重命名目录。您仍然无法删除重命名的目录,但您不会在重新创建它时失败。您可以稍后删除它,下次您需要这样做时。那么麻烦的可能性要低得多。因为更多的时间过去了。

关于c# - Directory.Exists 对时间敏感吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27693569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com