停止 Directory.GetFiles() 中的隐式通配符

Dan*_*ely 4 c# directory file filter

string[] fileEntries = Directory.GetFiles(pathName, "*.xml");
Run Code Online (Sandbox Code Playgroud)

还返回文件,例如foo.xml_ 是否有办法强制它不这样做,或者我必须编写代码来过滤返回结果。

这与命令提示符下的行为相同dir *.xml,但与 Windows 资源管理器中的搜索不同*.xml

Ahm*_*eed 5

此行为是设计使然。来自MSDN(查看注释部分和给出的示例):

文件扩展名恰好为三个字符的 searchPattern 返回扩展名为三个或更多字符的文件,其中前三个字符与 searchPattern 中指定的文件扩展名匹配。

您可以按如下方式限制它:

C#2.0:

string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName,  "*.xml"),
    delegate(string file) {
        return String.Compare(Path.GetExtension(file), ".xml", StringComparison.CurrentCultureIgnoreCase) == 0;
    });
 // or
string[] fileEntries = Array.FindAll(Directory.GetFiles(pathName,  "*.xml"),
    delegate(string file) {
        return Path.GetExtension(file).Length == 4;
    });
Run Code Online (Sandbox Code Playgroud)

C#3.0:

string[] fileEntries = Directory.GetFiles(pathName, "*.xml").Where(file =>
   Path.GetExtension(file).Length == 4).ToArray();
// or
string[] fileEntries = Directory.GetFiles(pathName, "*.xml").Where(file =>
    String.Compare(Path.GetExtension(file), ".xml",
        StringComparison.CurrentCultureIgnoreCase) == 0).ToArray();
Run Code Online (Sandbox Code Playgroud)