1

当字符串 "D:\test\..." 传递给System.IO.Directory.Exists方法时,它会True在我的机器上返回。我检查了以下代码;

public static void Main(string[] args)
{
    if (Directory.Exists("D:\\test\\..."))
        Console.WriteLine("Directory exist.");  //Control gets here
    else
        Console.WriteLine("Does not exist.");
}

即使指定位置不存在名称为“...”(三点)的目录,也会发生这种情况。

对此的进一步调查表明,不知何故,它只是通过完全忽略字符串的最后一部分来检查“D:”。由于父目录存在,它返回true。

我想知道是否有任何方法可以在不切断尾随点的情况下进行检查?

是否存在这种Directory.Exists方法的结果可能与预期不同的情况?

更新: 如果我在 Windows 资源管理器的地址栏中输入相同的字符串“D:\test\...”并按回车,则可以识别它找不到这样的目录。有没有办法获得类似的行为?

注意:我知道具有这样名称的目录不存在,但我从用户那里得到输入字符串,所以这个方法的输入可以是任何东西。

4

2 回答 2

1

我认为这是 Win32 的一种行为。

事实上,如果我创建一个...由以下命令命名的文件夹(不允许以正常方式创建文件夹):

mkdir \\?\c:\...

该文件夹...重定向到 C:\ 本身。所以我认为该文件夹...代表当前文件夹(在本例中为 C:\)并且它始终存在。

于 2018-08-29T14:35:11.900 回答
0

因为你又要去“D:\”磁盘了。

转义字符表达式“D:\test\...”表示名为“D”的磁盘,它就在那里。

如果更改磁盘盘符。你会得到“不存在”。这是你的答案。

D:\ --> D:\test --> .. 命令并再次进入 D:\。

并且您不能创建名为“...”的文件夹。你会得到“参数不正确”的错误。

于 2018-08-29T14:46:37.413 回答