string[] fileEntries = Directory.GetFiles(pathName, "*.xml");
同样返回foo.xml_
这样的文件有没有办法强制它不这样做,或者我必须编写代码来过滤返回结果。
这与命令提示符上的dir *.xml
行为相同,但与在Windows资源管理器中搜索*.xml
不同。
答案 0 :(得分:4)
此行为是设计使然。从MSDN开始(查看注释部分和给出的示例):
具有文件扩展名的searchPattern 正好三个字符返回 扩展名为3或的文件 更多人物,前三名 字符与文件扩展名匹配 在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;
});
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();
答案 1 :(得分:2)
这是由于windows的8.3搜索方法。如果您尝试搜索“* .xm”,则会得到0个结果。
你可以在.net 2.0中使用它:
string[] fileEntries =
Array.FindAll<string>(System.IO.Directory.GetFiles(pathName, "*.xml"),
new Predicate<string>(delegate(string s)
{
return System.IO.Path.GetExtension(s) == ".xml";
}));