温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Directory.GetFiles doesn't pick up all files
c# filenames

c# - Directory.GetFiles不会拾取所有文件

发布于 2020-03-27 15:48:47

我有一些用于获取目录中文件的代码,这很简单

foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv", SearchOption.TopDirectoryOnly))

这些文件的名称如下:

Totals.CSV142344
Totals.CSV142409
Totals.CSV142433
Totals.CSV142501
Totals.CSV142528

我的问题是它没有拾取最后一个文件。

我通过将其替换为固定的代码:

foreach (var Totalfile in new DirectoryInfo(rootfolder).GetFiles("*Totals*.csv*", SearchOption.TopDirectoryOnly))

说获取包含Totals和.csv的任何文件,以及.csv之后的任何文件。

我不明白的是为什么它得到了前四个文件,却没有得到最后四个文件。

我以为原始文件不会拾取任何文件?

查看更多

查看更多

提问者
zedgraphsad
被浏览
28
66.4k 2020-01-31 16:55

显然,GetFiles遵循说dir命令中实现的模式匹配逻辑

MSDN

因为此方法将同时检查8.3文件名格式和长文件名格式的文件名,所以类似于的搜索模式 "*1*.txt"可能会返回意外的文件名。例如,使用搜索模式"*1*.txt"返回“ longfilename.txt”,因为等效的8.3文件名格式为“ LONGFI〜1.TXT”。

正如@GSerg指出的,您的某些文件具有匹配的8.3名称。

dir /x *Totals*.csv*

2020-01-31  09:33                 0 TOTALS~1.CSV Totals.CSV142344
2020-01-31  09:33                 0 TOTALS~2.CSV Totals.CSV142409
2020-01-31  09:33                 0 TOTALS~3.CSV Totals.CSV142433
2020-01-31  09:33                 0 TOTALS~4.CSV Totals.CSV142501
2020-01-31  09:33                 0 TO5404~1.CSV Totals.CSV142528

尝试更改模式Totals.csv*以匹配所有文件。