好吧,我被一些看起来有点奇怪的东西咬住了。我意识到我没有正确格式化路径名是我的错误,但我希望以下测试返回 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/