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

标签 c# excel epplus

我刚刚注意到我的应用程序中有一件非常奇怪的事情。我有一段代码检查文件夹或任何子文件夹是否包含 .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/

相关文章:

vba - 在Excel VBA中制作多行数组?

c# - 使用 EPPlus C# 在单个 excel 单元格中提供不同的样式

c# - Epplus 获取正确的单元格背景 rgb 颜色

c# - 如何从epplus中的excel表中删除一列

javascript - 尝试从 C# 中的文本框获取文本值时出错(ASP.NET gridview)

c# - 有没有更好的方法来重写下面的代码?

excel - 向 Excel 发送的大型 jasper 报告会导致文件损坏

excel - 如果单元格在excel中包含字符串,如何复制单元格

c# - 使用和持久化枚举的最佳实践

C# 返回类型问题