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

问题描述 投票:1回答:2

当字符串“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键,则可以识别出它找不到这样的目录。有没有办法得到类似的行为?

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

c# .net system.io.directory
2个回答
1
投票

我认为这是Win32的行为。

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

mkdir \\?\c:\...

文件夹...重定向到C:\本身。所以我认为文件夹...代表当前文件夹(在这种情况下为C:\)并且它总是存在。


0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.