【问题标题】:searchPattern Logic on Directory.GetFiles MethodDirectory.GetFiles 方法上的 searchPattern 逻辑
【发布时间】:2016-08-21 07:57:29
【问题描述】:

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

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

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

字符前面的星号

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

意外的结果。应该是1。为什么“b_Request”出来了,为什么没有“b”被包含?

字符后面的星号

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

这是预期的结果

是bug还是我想太多了?

【问题讨论】:

    标签: c# .net search


    【解决方案1】:

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

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

    根据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 文件名的更多信息。

    【讨论】:

    • 谢谢!正如你所说的“b_Request”(使用 8.3 文件名格式“b_Requ~1”并与搜索模式匹配,很明显我的疑问。如果我检查“dir /x”或“dir /”,我看到“B_REQU~1” -n”。“b_1”怎么样?是在“8.3 格式”下吗?我在 dir 列表中没有看到任何短文件格式。你能再给我一些信息吗?
    • @yukon,来自wikipedia链接,上面写着“8.3文件名最多限制为八个字符”,所以我的理解是对于长度小于或等于8的文件路径,8.3文件名格式不适用于他们。希望对您有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多