C# 停止Directory.GetFiles()中的隐式通配符
还返回文件,如C# 停止Directory.GetFiles()中的隐式通配符,c#,file,directory,filter,C#,File,Directory,Filter,还返回文件,如foo.xml\uquo;是否有办法强制它不这样做,或者我必须编写代码来过滤返回结果 这与命令提示符下的dir*.xml行为相同,但不同于在windows资源管理器中搜索*.xml。此行为是经过设计的。来自(查看注释部分和给出的示例): 具有文件扩展名的搜索模式 只有三个字符返回 扩展名为3或3的文件 更多字符,其中前三个 字符与文件扩展名匹配 在searchPattern中指定 您可以将其限制如下: C#2.0: string[] fileEntries = Directory.
foo.xml\uquo;
是否有办法强制它不这样做,或者我必须编写代码来过滤返回结果
这与命令提示符下的
dir*.xml
行为相同,但不同于在windows资源管理器中搜索*.xml
。此行为是经过设计的。来自(查看注释部分和给出的示例):
具有文件扩展名的搜索模式
只有三个字符返回
扩展名为3或3的文件
更多字符,其中前三个
字符与文件扩展名匹配
在searchPattern中指定
您可以将其限制如下:
C#2.0:
string[] fileEntries = Directory.GetFiles(pathName, "*.xml");
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;
});
C#3.0:
string[] fileEntries = Directory.GetFiles(pathName, "*.xml");
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;
});
这是因为windows的8.3搜索方法。如果您尝试搜索“*.xm”,您将得到0个结果 您可以在.net 2.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();
string[]文件项=
Array.FindAll(System.IO.Directory.GetFiles(路径名,*.xml)),
新谓词(委托(字符串s)
{
返回System.IO.Path.GetExtension=“.xml”;
}));
你知道这种看似奇怪的行为的原因吗?旧版8.3文件名?我的目标是2.0框架,所以不能使用=>语法。@Dan:更新了使用匿名委托的代码@乔恩·赛格尔:是的,没错。MSDN链接上的另一个注释提到,该方法“检查8.3文件名格式和长文件名格式的文件名。”您的第一个C#2.0有一个*.txt,其中应该是*.xml。否则它会完全满足我的需要。谢谢。@Dan:谢谢,更新了。我在本地使用.txt文件进行测试,但在这里错过了:)