Directory.GetFiles上的searchPattern逻辑方法

问题描述:

我想知道Directory.GetFiles方法上的搜索模式逻辑是什么。我在搜索模式中使用星号通配符。我不明白什么样的逻辑适用于搜索,如果我把“*”前面的字符。Directory.GetFiles上的searchPattern逻辑方法

如果我把char放在char的前面,我得到了意想不到的结果,但是如果我放在char的后面,这是正确的。

这是文件夹中的文件列表,示例代码和结果。

enter image description here

星号在前方炭

string _strSearchPattern = "*1"; 
foreach (string _strFolder in Directory.GetFiles(@"C:\Temp\FileList", _strSearchPattern)) 
Console.WriteLine("{0}", _strFolder); 

意外结果。它应该是1.为什么“b_Request”出来,但为什么不包含“b”?

enter image description here

星号字符

string _strSearchPattern = "1*"; 
foreach (string _strFolder in Directory.GetFiles(@"C:\Temp\FileList", _strSearchPattern)) 
Console.WriteLine("{0}", _strFolder); 

这里的背后是预期的结果

enter image description here

它是错误,或者说我想得太多了?

这是有点棘手,但不是一个错误。

星号(*)表示该位置的零个或多个字符,问号(?)代表该位置的零个或一个字符。

根据MSDN

因为针对用8.3文件 名格式和长文件名格式,类似于 搜索模式“* 1 * .TXT”可以文件名此方法检查返回意外的文件名称。例如,使用 “* 1 * .txt”的搜索模式返回“longfilename.txt”,因为 等效的8.3文件名格式为“LONGFI〜1.TXT”。

在你第一种情况下,与搜索路径“* 1”将匹配任何路径有信1,路径1和路径b_Request(与8.3文件名格式b_Requ〜1)将返回结束。

你可以参考here了解更多关于8.3文件名。

+0

谢谢!正如你所说的“b_Request”(使用8.3文件名格式“b_Requ〜1”)并且与搜索模式相匹配,这显然是我的疑问。如果我检查“dir/x”或“dir/-n“。”b_1“如何?它是否在”8.3格式“下?我在dir列表中看不到任何短文件格式。你能否再次给我提供一些信息: – ib3an

+0

@yukon,来自*链接, 8.3文件名被限制为最多8个字符“,所以我的理解是,对于长度小于或等于8的文件路径,8.3文件名格式不适用于它们,希望它有帮助。 – Chasefornone