【算法系列】使用LINQ来检测和删除重复的文件

 

复制代码
代码
using System;  
using System.IO;  
using System.Linq;  
using System.Security.Cryptography;  
using System.Text;  
 
namespace DupeFinder  
{  
    
internal class Program  
    {  
        
private static void Main(string[] args)  
        {  
            Directory.GetFiles(
@"d:\icons""*.ico")  
                .Select(  
                    f 
=> new 
                             {  
                                 FileName 
= f,  
                                 FileHash 
= Encoding.UTF8.GetString( new SHA1Managed()  
                                                                    .ComputeHash(
new FileStream(f, FileAccess.Read)))  
                             })  
                .GroupBy(f 
=> f.FileHash)  
                .Select(g 
=> new {FileHash = g.Key, Files = g.Select(z => z.FileName).ToList()})  
                .SelectMany(f 
=> f.Files.Skip(1))  
                .ToList()  
                .ForEach(File.Delete);  
            Console.ReadKey();  
        }  
    }  
复制代码

 

相当精妙地写法:)

见老外的文章:http://www.hosca.com/blog/post/2010/04/13/using-LINQ-to-detect-and-remove-duplicate-files.aspx

posted @   Leepy  阅读(725)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
点击右上角即可分享
微信分享提示