c# - DirectoryExists ("c:temp\\foo") 当目录不存在时返回真!

标签 c# .net file-io

好吧,我被一些看起来有点奇怪的东西咬住了。我意识到我没有正确格式化路径名是我的错误,但我希望以下测试返回 false,尤其是因为该文件夹不存在。

DirectoryExists("C:temp\\foo")

但实际上,即使目录不存在,它也会返回 true!

代码应该是

DirectoryExists("C:\\temp\\foo")

有人可以向我解释为什么我从第一个版本中得到误报吗?我希望它可能返回 false 或抛出异常,但不会返回 true。

最佳答案

此 API 运行正常,但在您第一次遇到此行为时通常会出现错误。省略卷号后的 \ 具有特殊语义。它将用传递到该卷的最后一次调用 SetCurrentDirectory 的值替换卷说明符。这里讨论了如何记住它

在这种情况下,最后传入的值要么是 c:\,要么就是当前目录尚未设置。因此调用实际上变成了第二个版本

Directory.Exists("c:\\temp\\foo")

这被正确评估为 true

为什么 Directory.Exists 会发生这种情况是因为它使用的函数很深很深 GetFullPathName这依赖于此行为(请参阅链接文档)。

关于c# - DirectoryExists ("c:temp\\foo") 当目录不存在时返回真!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4198050/

相关文章:

.net - 反射,有IsClass但没有IsStruct?

java - 将 2D 字节数组写入文本文件 Java

c# - Xamarin 谷歌地图空白

c# - 使用动态发出的 POCO 进行快速序列化和反序列化

c# - 如何在Unity中测试方法包括异步方法

.net - 使用 .Net Framework 的空间 anchor (Azure 混合现实服务)

Java删除不删除

python - 如何使用python脚本将sql.gz文件导入mysql数据库?

c# - 在WPF中绑定(bind)高度和宽度时如何减少绑定(bind)异常的数量?

c# - 防止用户通过按 ESC 按钮关闭对话框