DirectoryExists("C:temp\\foo")
但事实上,即使该目录不存在,它也会返回true!
代码应为
DirectoryExists("C:\\temp\\foo")
有人可以向我解释为什么我会从第一个版本中得到误报吗?我希望它可能会返回false或抛出异常,但不会返回true。
答案 0 :(得分:21)
此API行为正常,但在您第一次遇到此行为时经常显示不正确。在卷号后面省略\
具有特殊语义。它将使用传递给该卷的最后一次调用SetCurrentDirectory
的值替换卷说明符。如何记住这一点将在这里讨论
在这种情况下,传入的最后一个值是c:\
,或者当前目录尚未设置。因此,呼叫实际上成为第二个版本
Directory.Exists("c:\\temp\\foo")
这正确评估为真
为什么Directory.Exists
发生了这种情况,在它使用GetFullPathName的函数中深入,深入地依赖于这种行为(参见链接文档)。