none
关于Directory.EnumerateDirectories 函数的问题,求大神帮解释一下

    问题

  • imports system.io

    dim dirs = From folder In Directory.EnumerateDirectories(“c:\windows”, "*1*")

    我本意是搜索windows文件夹下所有名字中包含"1"的文件夹

    结果函数得到的结果有很多文件夹都不包含1.请问这是为什么

    2016年4月20日 16:34

答案

全部回复

  • 还真是的,不过用cmd 在C:\Windows 下来执行  dir /ad *1* 得到同样的结果,应该是系统的问题,而不是.net的问题。

    又试了下dir /ad *2* 返回的多了不多的几个

    下面这些都是正常的,很奇怪。

    dir /ad *3*

    dir /ad *4*

    dir /ad *a*

    dir /ad *b*

    ****************************************************************

    有调查了下,发现应该和老的Dos的8.3格式的目录文件名有关系。

    8.3格式中目录名最长之后8个字符。

    *1* 返回的目录名中,如果没有1, 就是目录名多余8个字符,多余于8个字符的在旧的dos中就变成Instal~1 (从Installer变来)这样的目录,里面就包含1了。

    例如 cd instal~1 这样的命令是能够进入Installer目录的

    你可以在使用结果dirs的时候自己再判断一次是否包含要搜索的字符。

    另外一种方法是在注册表中关闭8.3格式文件名:

    How to disable 8.3 file name creation on NTFS partitions

    参考资料:

    c# EnumerateFiles wildcard returning non matches?

    Windows Wildcards Can Grab Extra Files

    The joys of search wildcards in Win32 command interpreters

    2016年4月20日 23:45
  • 太好了,就是这个原因。我昨晚睡觉都在想这个东西,一直没往dos 方面想。vs这个东西真好,问问题真方便!谢谢大神!

    2016年4月21日 0:51