将字符串“ 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,就可以确定找不到该目录。有什么办法可以得到类似的行为?
注意:我知道具有该名称的目录不存在,但是我正在从用户那里获取输入字符串,因此对该方法的输入可以是任何内容。
答案 0 :(得分:1)
我认为这是Win32的行为。
实际上,如果我通过以下命令创建名为...
的文件夹(不允许以常规方式创建该文件夹):
mkdir \\?\c:\...
文件夹...
重定向到C:\本身。因此,我认为文件夹...
代表当前文件夹(在这种情况下为C:\),并且始终存在。
答案 1 :(得分:0)
因为您再次要使用“ D:\”磁盘。
转义字符表达式“ D:\ test \ ...”表示名为“ D”的磁盘,并且已经存在。
如果更改磁盘号。您将得到“不存在”。这是你的答案。
D:\-> D:\ test-> .. comand然后再次进入D:\。
,您将无法创建名为“ ...”的文件夹。您将收到“参数不正确”错误。