代码之家  ›  专栏  ›  技术社区  ›  Dan Bailiff

Directory存在(“c:TEMP\FoO”)当目录不存在时返回true!

  •  12
  • Dan Bailiff  · 技术社区  · 15 年前

    好吧,我被一些看起来有点奇怪的东西咬了。我意识到不对格式名称进行正确设置是我的错误,但我希望下面的测试返回false,尤其是因为文件夹不存在。

    DirectoryExists("C:temp\\foo")
    

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

    代码应该是

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

    有人能告诉我为什么我从第一个版本得到假阳性吗?我希望它返回false或抛出异常,但不返回true。

    1 回复  |  直到 15 年前
        1
  •  21
  •   JaredPar    15 年前

    此API的行为正常,但在第一次遇到此行为时往往会出现错误。省略 \ 后卷字母有特殊的语义。它将用传递到上一次调用中的值替换卷说明符 SetCurrentDirectory 为了那卷。这里将讨论如何记住这一点

    在本例中,传入的最后一个值是 c:\ 或者只是没有设置当前目录。因此,这个调用实际上成为了第二个版本

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

    正确评估为真

    为什么会这样 Directory.Exists 它所使用的功能 GetFullPathName 依赖于此行为(请参阅链接的文档)。