【问题标题】:GetFiles not getting the correct files [duplicate]GetFiles 没有得到正确的文件 [重复]
【发布时间】:2019-07-02 11:43:59
【问题描述】:

我需要获取指定文件夹的所有子文件夹中的所有 .txt 文件,所以我这样做:

var files = Directory.GetFiles(reportsFolder, "*.txt", SearchOption.AllDirectories);

但是,在某些文件夹中,我也有扩展名为 .txt_TODO 的文件,这些文件也被 GetFiles 检索。

如何跳过这些文件?

【问题讨论】:

  • 您可以获取所有文件,然后通过正则表达式“.+\.txt$”进行过滤
  • 我刚试过。而且我只有 .txt 文件。
  • 或加.Where(file => Path.GetExtension(file).Equals(".txt", StringComparison.OrdinalIgnoreCase))
  • 使用这个模式"?*.txt"

标签: c#


【解决方案1】:

只需通过将扩展名与“.txt”进行比较来过滤结果,例如使用 LINQ:

var files = Directory.GetFiles(reportsFolder, "*.txt", SearchOption.AllDirectories)
    .Where(f => Path.GetExtension(f).Equals(".txt", StringComparison.OrdinalIgnoreCase))
    .ToArray();

【讨论】:

  • .EnumerateFiles 而不是 .GetFiles 在上下文中将是更好的选择(不会过早实现)
  • @DmitryBychenko:当然;但随后也必须删除 ToArray()...更好的方法取决于他对返回的集合所做的事情。
  • @KlausGütter:即使最终将.ToArray() 切换到EnumerateFiles 似乎是一个更好的选择:Directory.GetFiles 的具体化结果立即被Where 懒惰地枚举,所以用@ 替换它如果最终的 .ToArray() 保持不变,则 987654328@ 不会改变行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2017-02-25
  • 1970-01-01
  • 2012-05-11
  • 2017-01-03
  • 2020-06-14
相关资源
最近更新 更多