我有一个包含约 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/