DirectoryInfo.GetDirectories(string searchPattern)中是否存在漏洞?

11
当在指向有效文件夹(不包括驱动器根目录)的DirectoryInfo类实例上调用 DirectoryInfo.GetDirectories(".")时,结果是一个DirectoryInfo数组,其第一个(也是唯一的)元素指向一个无效目录,该目录与自身同名,在自身下方。
例如:
static void Main(string[] args)
{
    DirectoryInfo di = new DirectoryInfo("c:\\temp");
    DirectoryInfo[] dis = di.GetDirectories(".");
    Console.WriteLine(dis[0].FullName);
}

打印一个不存在的目录:
c:\temp\temp

我理解在Windows中,“.”代表当前目录。如果该方法返回“c:\temp”,那么这可能对我是可以接受的,但是返回具有相同名称的虚假子目录似乎是完全错误的行为。
我应该能够断言从此函数返回的任何DirectoryInfo对象实际上都存在…… 对吧?!
我使用.NET Reflector反编译了该类,但它导致了这个方法。
internal static string[] InternalGetFileDirectoryNames(string path, string userPathOriginal, string searchPattern, bool includeFiles, bool includeDirs, SearchOption searchOption)"

这是一个巨兽,我不想在脑海中思考它的逻辑。 我认为这显然是一个错误。

顺便说一下 - "*"可以正常工作,以防有人问。


有趣的是,帮助文件提到了。。但没有提到。。 - Greg
你说得有道理。然而,这不是那种“一直这样”的事情之一吗?每个人都会过滤掉“.”和“..”目录列表吧? - ScottCher
1
@ScottCher 在 DOS 中,如果我在一个目录中执行 "dir ." 命令,我不会得到任何不存在的结果。我只会得到 "." 和 ".."(它们都存在)。 - TheSoftwareJedi
1个回答

8
我可以确认你所说的内容,并且无法找到任何合理的解释,所以我投票给BUG
我也这么认为,我已经将此提交给微软:链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接