C# FileInfo - 查找重复文件

标签 c# file fileinfo

我有一个包含约 200.000 个文件条目的 FileInfo 数组。我需要找到具有相同文件名的所有文件。我需要每个重复文件的目录名和文件名作为结果,因为我想以后重命名它们。

我已经尝试过的:

  • 用 2 个 For“循环”将每个条目与整个列表进行比较//坏主意,这需要数小时甚至数天 ^^
  • 尝试使用 Linq 排序//因为我没有使用 Linq 之前我很难写出正确的语句,也许有人可以帮助我 :)

最佳答案

听起来应该这样做:

var duplicateNames = files.GroupBy(file => file.Name)
                          .Where(group => group.Count() > 1)
                          .Select(group => group.Key);

现在是学习 LINQ 的非常好时机。它非常有用 - 花时间学习它(即使只是 LINQ to Objects)会很快收回成本。

编辑:好的,如果您想要每个组的原始 FileInfo,只需放下选择:

var duplicateGroups = files.GroupBy(file => file.Name)
                           .Where(group => group.Count() > 1);

// Replace with what you want to do
foreach (var group in duplicateGroups)
{
     Console.WriteLine("Files with name {0}", group.Key);
     foreach (var file in group)
     {
         Console.WriteLine("  {0}", file.FullName);
     }
}

关于C# FileInfo - 查找重复文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9001542/

相关文章:

c# - 更新 SQL 命令不影响任何行

c# - C# 中的 OFX​​ 文件解析器

c# - 在当前正在写入的文件上创建 FileInfo 是否安全?

c# - 无法通过 IP 地址连接到 SQL Server Express - c#

Python在特定目录中创建文件

python - 在 Flask 中显示一个 .txt 文件

C、文件、路径等

android - 文件从 SD 卡中消失

c++ - 在 C++ 中获取 mp3 长度

c# - 无法将类型 'System.Threading.Tasks.Task' 隐式转换为 'Windows.Foundation.IAsyncAction' 。存在显式转换