Directory.Exists 对时间敏感吗?

2024-02-23

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

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(使用前将#替换为@)

Directory.Exists 对时间敏感吗? 的相关文章

随机推荐

  • 为什么 OS X 在复制到 Samba 共享时不像 Windows 那样锁定文件?

    我有一个项目 它使用 net FileSystemWatcher 来观看 Samba 网络共享中的视频文件 当它看到一个文件时 会将其添加到编码队列中 当文件出队时 它们会被移动到本地目录 然后进程将文件编码为几种不同的格式并将它们吐出到输
  • 通过 SPARQL 处理 R XML 的编码问题

    我遇到了 R 的 SPARQL 包的编码问题 我正在运行以下代码 library SPARQL rights query lt PREFIX dc
  • 当用户开始输入时隐藏数据列表选项

    我创建了一个数据列表 显示用户关闭程序时保存的数据 我希望数据列表仅在用户单击下拉箭头 或输入框 时显示 并在用户开始键入时隐藏 我试过了 创建一个oninput事件希望当用户开始输入时数据列表将隐藏 使用隐藏数据列表datalist st
  • 多个登录表单

    我的 Web 应用程序使用 Spring security 进行保护 现在我正在尝试设置两个不同的登录页面 这是我的配置
  • 绘制大圆路径

    我正在尝试绘制一些基于路径 连接的地图 但无法弄清楚如何绘制 我看到基于一点的指标有很多可能性 伦敦的犯罪热点等 使用 googleVis ggmap 等 但我找不到太多基于两点的指标的示例 城市之间的移民 火车路线等 包中有一个示例geo
  • 找不到接受所提供参数的“+”重载

    所以我试图将我用 Objective C 制作的游戏转换为 Swift 我试图让它工作 但它总是给我一个错误 var actualX Double arc4random Double rangeX Double minX 我也尝试过 var
  • 如何在 Doxygen 注释中包含“<”?

    假设我正在使用 DOxygen Visual studio 兼容注释记录成员函数 如何使用小于 例如 如果我这样做
  • 如何在Azure函数的自定义HTTP路由中指定查询参数?

    我有一个 Azure Function 我想设置自定义 HTTP 端点 按照这个SO的答案question https stackoverflow com questions 52748519 how can my http trigger
  • Android Studio 中未显示菜单栏

    我在 macOS Sierra 上使用 Android Studio 应用程序时遇到问题 似乎该应用程序并未真正打开 因为通常 当应用程序打开时 其在扩展坞中的图标下有一个点 但在我的电脑上没有 真正的问题是 文件 构建 等菜单栏选项没有显
  • 唯一索引的分区列必须是索引键错误的子集

    所以我的项目要求我使用分区将名为 Leases 的表分成两个 分区的一侧是早于 2003 年 1 月 15 日的租约 另一侧是比该日期更新的租约 基本上我之前创建了一个名为 Leases 的表 我想为其创建一个分区 我需要创建一个全新的表来
  • 如何在 jenkinsfile(Groovy 脚本)中发送带有附件的电子邮件?

    我想在詹金斯的构建后操作后发送电子邮件 因此我编写了 jenkinsfile 如下 但我需要一些绝妙的脚本 1 zip 文件附件 2 在附加文件之前 我需要将文件夹转换为zip格式 注意 请不要建议电子邮件插件程序和配置 我更喜欢 Jenk
  • 无需 JavaScript 即可发布链接

    假设我的页面上有一个日历 单击某一天会将这一天标记为完成 但我想使用 POST 而不是 GET 因为 GET 不适合这种东西 改变一些东西 而且我也不想使用 JavaScript 我在这里要做的是构建一个无需 JavaScript 即可工作
  • 这是 Delphi 动态数组行为所期望的吗

    问题是 当动态数组被设置为类成员时 Delphi 如何在内部管理它们 它们是通过引用复制还是传递的 使用德尔福10 3 3 The UpdateArray方法从数组中删除第一个元素 但数组长度仍为 2 这UpdateArrayWithPar
  • 如何获得字典顺序中最小的?

    我正在做leetcode练习 https leetcode com problems remove duplicate letters https leetcode com problems remove duplicate letters
  • 限制限定符和指针算术

    递增或递减限制限定指针是否保留不别名假设 a and b point to disjoint arrays void foo size t n double restrict a double restrict b size t i dou
  • Mockito 间谍方法不起作用

    我在使用mockito spy 方法时遇到麻烦 我最近到达了一个 旧 项目 我的第一个任务是在其中添加mockito 并进行真正的单元测试 该项目有很多概念问题 但这不是重点 我解释一下我的问题 我有课 public class Tutu
  • 您如何在 VIM 中使用 FASD 和 FZF 的外部导航?

    您是否找到了使用 FASD 或 fzf 和 VIM 进行文件导航的舒适工作流程 我在 VIM 中打开最近的文件时遇到问题 因为 FASD 无法捕获它们 我正在寻找一些技巧 FASD 工作流程 将以下行放入您的 zshrc alias v f
  • Cloud Foundry 应用程序正在运行的实例数

    我的应用程序需要获取其运行的实例数 在运行时我的应用程序在程序逻辑中使用此信息 VCAP APPLICATION 环境变量无法提供此信息 直接调用 API 并使用 实例 属性是一种选择 但我不知道如何在我的应用程序中直接调用应用程序 API
  • 在 angular2 中使用 http 访问 Amazon s3

    我的 Amazon s3 存储桶中有一个 json 文件 当我尝试在 Angular2 应用程序中使用 http 调用访问该文件时 出现错误 跨源请求被阻止 同源策略不允许读取 远程资源位于https s3 us east 2 amazon
  • Directory.Exists 对时间敏感吗?

    我的应用程序中有以下代码 if Directory Exists myPath Directory CreateDirectory myPath 如果我在常规单元测试中运行它 有时它会通过 有时则不会 该目录始终存在 我确定了这一点 因此从