System.IO.Directory.Exists无法按预期工作

时间:2018-08-29 14:24:32

标签: c# .net system.io.directory

将字符串“ 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 \ ...”,然后按Enter,就可以确定找不到该目录。有什么办法可以得到类似的行为?

注意:我知道具有该名称的目录不存在,但是我正在从用户那里获取输入字符串,因此对该方法的输入可以是任何内容。

2 个答案:

答案 0 :(得分:1)

我认为这是Win32的行为。

实际上,如果我通过以下命令创建名为...的文件夹(不允许以常规方式创建该文件夹):

mkdir \\?\c:\...

文件夹...重定向到C:\本身。因此,我认为文件夹...代表当前文件夹(在这种情况下为C:\),并且始终存在。

答案 1 :(得分:0)

因为您再次要使用“ D:\”磁盘。

转义字符表达式“ D:\ test \ ...”表示名为“ D”的磁盘,并且已经存在。

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

D:\-> D:\ test-> .. comand然后再次进入D:\。

,您将无法创建名为“ ...”的文件夹。您将收到“参数不正确”错误。