DirectoryExists(" c:temp \\ foo")在目录不存在时返回true!

时间:2010-11-16 19:18:33

标签: c# .net file-io

好吧,我有点奇怪的东西。我意识到我没有正确格式化路径名是错误的,但我希望以下测试返回false,特别是因为该文件夹不存在。

DirectoryExists("C:temp\\foo")

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

代码应为

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

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

1 个答案:

答案 0 :(得分:21)

此API行为正常,但在您第一次遇到此行为时经常显示不正确。在卷号后面省略\具有特殊语义。它将使用传递给该卷的最后一次调用SetCurrentDirectory的值替换卷说明符。如何记住这一点将在这里讨论

在这种情况下,传入的最后一个值是c:\,或者当前目录尚未设置。因此,呼叫实际上成为第二个版本

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

这正确评估为真

为什么Directory.Exists发生了这种情况,在它使用GetFullPathName的函数中深入,深入地依赖于这种行为(参见链接文档)。