我已阅读有关Directory.GetPath
搜索模式及其使用方式的文档,因为我注意到*.dll
同时找到了test.dll
和test.dll_20170206
。记录了这种行为
现在,我有一个程序,它根据用户配置的掩码列出文件夹中的文件并处理它们。我注意到像*.txt
这样的面具会导致上面提到的“问题”。
但是,掩码fixedname.txt
也会导致fixedname.txt_20170206
或类似内容出现在列表中,即使文档说明这种情况只会发生
在searchPattern中使用星号通配符时,例如“* .txt”
为什么?
PS:我刚检查过:即使文档说
,将文件掩码更改为fixednam?.txt
也无济于事
使用问号通配符时,此方法仅返回与指定文件扩展名匹配的文件。例如,给定两个文件“file1.txt”和“file1.txtother”,在目录中,“file?.txt”的搜索模式只返回第一个文件,而搜索模式为“file * .txt”。返回两个文件。
答案 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
}
}