Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何筛选具有特定扩展名的Directory.Enumerate文件_C#_.net_Directory_File Extension - Fatal编程技术网

C# 如何筛选具有特定扩展名的Directory.Enumerate文件

C# 如何筛选具有特定扩展名的Directory.Enumerate文件,c#,.net,directory,file-extension,C#,.net,Directory,File Extension,我想要一个文件夹中所有xml文件的列表,如下所示: foreach (var file in Directory.EnumerateFiles(folderPath, "*.xml")) { // add file to a collection } 但是,如果由于某种原因,我在folderPath中有任何以.xmlXXX结尾的文件,其中XXX表示任何字符,那么它们将是枚举器的一部分 如果你能很容易地解决这个问题 foreach (var file in Directory.Enume

我想要一个文件夹中所有xml文件的列表,如下所示:

foreach (var file in Directory.EnumerateFiles(folderPath, "*.xml"))
{
    // add file to a collection
}
但是,如果由于某种原因,我在
folderPath
中有任何以
.xmlXXX
结尾的文件,其中
XXX
表示任何字符,那么它们将是枚举器的一部分

如果你能很容易地解决这个问题

foreach (var file in Directory.EnumerateFiles(folderPath, "*.xml").Where(x => x.EndsWith(".xml")))

但这对我来说似乎有点奇怪,因为我基本上要搜索同一个东西两次。有没有办法直接获取正确的文件,或者我做错了什么?

根据《每日邮报》的报道,使用EnumerateFiles作为3个字符的扩展名似乎无法做到这一点

引自上述文章

在搜索模式(如“.txt”)中使用星号通配符时,指定扩展名中的字符数会影响搜索,如下所示: 如果指定的扩展名正好有三个字符长,则该方法返回扩展名以指定扩展名开头的文件。例如,“.xls”同时返回“book.xls”和“book.xlsx”。 在所有其他情况下,该方法返回与指定扩展名完全匹配的文件。例如,“.ai”返回“file.ai”,但不返回“file.aif”。 使用问号通配符时,此方法仅返回与指定文件扩展名匹配的文件。例如,给定目录中的两个文件“file1.txt”和“file1.txtother”,搜索模式“file?.txt”只返回第一个文件,而搜索模式“file.txt”则返回两个文件


因此,使用.Where扩展名似乎是解决问题的最佳方法

是文件搜索中通配符使用的记录/默认行为

如果指定的扩展名正好有三个字符长,则 方法返回扩展名以指定名称开头的文件 分机。例如,“*.xls”同时返回“book.xls”和 “book.xlsx”

您当前的两次过滤方法是正确的

您可以做的唯一改进是忽略
EndsWith
中的大小写,如:

x.EndsWith(".xml", StringComparison.CurrentCultureIgnoreCase)

是的,这个设计很愚蠢,愚蠢,愚蠢!它不应该那样做。这也很烦人

这就是说,看起来情况就是这样:它实际上搜索长文件名和短文件名。因此,扩展名较长的文件的文件名较短,扩展名被截断为三个字符


在较新版本的Windows上,短文件名可能会被禁用。因此,在较新系统上的行为实际上是您所期望的,并且它本来应该是这样的。

我为没有正确阅读文档而感到羞愧。谢谢你的改进