C#Directory.GetFiles在不同的计算机上返回不同的结果
我只是注意到我的应用程序中一个非常奇怪的事情。 我有一个代码片段,检查文件夹或任何子文件夹是否包含.xls
文件而不是.xlsx
。 这是因为我使用EPPlus
,它不能处理.xls
文件。 在运行Windows 10 Home
的计算机上,以下代码仅返回.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
当在诸如“* .txt”的searchPattern中使用星号通配符时,指定扩展名中的字符数会影响search,如下所示:
- 如果指定的扩展名正好是三个字符,那么
方法返回具有以指定开头的扩展名的文件
延期。 例如, “* .xls”返回“book.xls”和
“book.xlsx” 。 - 在所有其他情况下,该方法将返回与指定的扩展名完全匹配的文件。 例如,“* .ai”返回“file.ai”而不是“file.aif”。
当您使用问号通配符时,此方法只返回与指定的文件扩展名匹配的文件。 例如,在目录中给定两个文件“file1.txt”和“file1.txtother”,“file?.txt”的search模式只返回第一个文件,而“file * .txt”返回这两个文件。
以上是MSDN所说的正常行为。
但在你的问题可能会导致文件名约定8.3文件名 。 禁用它,看看你是否得到预期的结果。
fsutil behavior set disable8dot3
也看看这个问题