当字符串“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键,则可以识别出它找不到这样的目录。有没有办法得到类似的行为?
注意:我知道具有此类名称的目录不可存在,但我从用户那里获得输入字符串,因此输入此方法可以是任何内容。
我认为这是Win32的行为。
实际上,如果我通过以下命令创建名为...
的文件夹(以正常方式创建文件夹不允许):
mkdir \\?\c:\...
文件夹...
重定向到C:\本身。所以我认为文件夹...
代表当前文件夹(在这种情况下为C:\)并且它总是存在。
因为你再次使用“D:\”磁盘。
转义字符表达式“D:\ test \ ...”表示名为“D”的磁盘,它就在那里。
如果更改了磁盘字母。你会得到“不存在”。这是你的答案。
D:\ - > D:\ test - > ..命令再次进入D:\。
并且您无法创建名为“...”的文件夹。你会得到“参数不正确”的错误。