C# Directory.GetFiles 在不同的计算机上返回不同的结果

Ogg*_*las 5 c# excel epplus

我刚刚在我的应用程序中注意到一个非常奇怪的事情。我有一段代码,用于检查文件夹或任何子文件夹是否包含.xls文件而不是.xlsx. 这是因为我使用EPPluswhich 无法处理.xls文件。在运行Windows 10 Home下面代码的计算机上只返回.xls文件而不返回任何.xlsx文件。我现在尝试在一Windows 10 Pro台机器上运行相同的代码,并且代码也获取了.xlsx文件。我知道我只能.xls使用文件,Linq 但我仍然想知道为什么会发生这种情况。

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}");
}
Run Code Online (Sandbox Code Playgroud)

kgz*_*dev 4

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
Run Code Online (Sandbox Code Playgroud)

也看看这个问题