【发布时间】:2019-02-04 09:12:16
【问题描述】:
当字符串 "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\...”并回车,则可以识别出找不到该目录。有没有办法获得类似的行为?
注意:我知道这个名称的目录不存在,但我从用户那里得到输入字符串,所以这个方法的输入可以是任何东西。
【问题讨论】:
-
首先通过 IO.Path.GetFullPath() 输入文本,它会处理这些点并让您知道文件系统真正考虑的地方。三个点将被解释为 dot-dot=up 然后 dot=here。另一个虚构的文件是NUL,我认为旧的COM1、COM2等仍然存在
-
永远不要调用这个函数。它在规范中存在错误。
-
...无论如何都是无效目录,您不能创建这样的目录。 -
input string from user, so input to this method could be anything...好吧,但有时甚至用户也需要动动脑筋;)
标签: c# .net system.io.directory