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 

也看看这个问题