Directory.GetFiles方法上的searchPattern逻辑

时间:2016-08-21 07:57:30

标签: c# .net search

我想知道Directory.GetFiles方法上的搜索模式逻辑是什么。我在搜索模式上使用星号通配符。如果我把“*”放在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

是错误还是我在想太多?

1 个答案:

答案 0 :(得分:2)

这有点棘手但不是错误。

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

根据MSDN

  

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

在第一种情况下,带有“* 1”的搜索路径将匹配以字母1结尾的任何路径,路径1和路径b_Request(使用8.3文件名格式b_Requ~1)将被返回。

有关8.3文件名的更多信息,请参阅here