对Directory.GetFiles

时间:2017-02-06 09:35:54

标签: c#

我已阅读有关Directory.GetPath搜索模式及其使用方式的文档,因为我注意到*.dll同时找到了test.dlltest.dll_20170206。记录了这种行为

现在,我有一个程序,它根据用户配置的掩码列出文件夹中的文件并处理它们。我注意到像*.txt这样的面具会导致上面提到的“问题”。

但是,掩码fixedname.txt也会导致fixedname.txt_20170206或类似内容出现在列表中,即使文档说明这种情况只会发生

  

在searchPattern中使用星号通配符时,例如“* .txt”

为什么?

PS:我刚检查过:即使文档说

,将文件掩码更改为fixednam?.txt也无济于事
  

使用问号通配符时,此方法仅返回与指定文件扩展名匹配的文件。例如,给定两个文件“file1.txt”和“file1.txtother”,在目录中,“file?.txt”的搜索模式只返回第一个文件,而搜索模式为“file * .txt”。返回两个文件。

2 个答案:

答案 0 :(得分:2)

如果您需要解决方案,可以将*替换为(.*),将?替换为.,将过滤模式转换为正则表达式。您还必须转义一些模式字符,如点。然后根据此正则表达式检查从Directory.GetFiles获得的每个文件名。请记住,不仅检查它是否匹配,而且匹配长度等于文件名的长度。否则你会得到与以前相同的结果。

答案 1 :(得分:1)

GetFiles使用模式搜索,它搜索以指定字母结尾的路径中的所有名称。

您可以编写类似于下面的代码来获取.txt扩展文件

  foreach (string strFileName in Directory.GetFiles(@"D:\\test\","*.txt"))
            {
                string extension;
                extension = Path.GetExtension(strFileName);

                if (extension != ".txt")
                    continue;
                else
                {
                    //processed the file
                }
            }