我刚刚注意到我的应用程序中有一件非常奇怪的事情。我有一段代码检查文件夹或任何子文件夹是否包含 .xls
文件而不是 .xlsx
。这是因为我使用的 EPPlus
无法处理 .xls
文件。在运行 Windows 10 家庭版
的计算机上,下面的代码仅返回 .xls
文件,但不返回任何 .xlsx
文件。我现在尝试在 Windows 10 Pro
机器上运行相同的代码,代码也提取了 .xlsx
文件。我知道我只能使用 Linq
获取 .xls
文件,但我仍然想知道为什么会发生这种情况。
var filePaths = Directory.GetFiles("C:\\xmlfiles", "*.xls", SearchOption.AllDirectories).ToList();
if (filePaths.Count > 0)
{
var files = string.Join(",", filePaths);
throw new Exception($"Folder contains .xls files which EPPlus can't handle. Please convert them first. Files: {files}");
}
最佳答案
来自 MSDN
当您在 searchPattern 中使用星号通配符(例如“*.txt”)时,指定扩展名中的字符数会影响搜索,如下所示:
- 如果指定的扩展名正好是三个字符长,
方法返回扩展名以指定
开头的文件 延期。例如,"*.xls" 返回 "book.xls" 和
“book.xlsx”。 - 在所有其他情况下,该方法返回完全匹配的文件 指定的扩展名。例如,“*.ai”返回“file.ai” 但不是“file.aif”。
当您使用问号通配符时,此方法仅返回与指定文件扩展名匹配的文件。例如,给定目录中的两个文件“file1.txt”和“file1.txtother”,搜索模式“file?.txt”仅返回第一个文件,而搜索模式“file*.txt”返回两个文件。
如 MSDN 所述,以上是正常行为。
但是关于你的问题,它可能是由文件名约定引起的 8.3 filename .禁用它并查看是否得到预期的结果。
fsutil behavior set disable8dot3
也看看这个question
关于C# Directory.GetFiles 在不同的计算机上返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43581018/