C#Directory.GetFiles在不同的计算机

时间:2017-04-24 06:19:17

标签: c# excel epplus

我刚刚在我的应用程序中发现了一个非常奇怪的事情。我有一段代码,用于检查文件夹或任何子文件夹是否包含.xls个文件而不是.xlsx。这是因为我使用EPPlus无法处理.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}");
}

1 个答案:

答案 0 :(得分:3)

来自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