You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实现删除文件名前缀重复的多余文件 仅保留首个匹配文件

按前缀匹配删除重复文件的C#实现

需求描述

目录下存在大量文件名前缀重复的文件,示例文件名如下:

  • afilename[a].txt
  • afilename[f].txt
  • afilename[j].txt
    要求:保留相同前缀(即文件名中[符号之前的内容)的第一个文件,其余同前缀文件全部删除,上述示例最终仅保留afilename[a].txt。

原有代码问题

原有代码按完整文件名分组,无法实现仅对比[前的前缀部分匹配的需求:

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

需要实现的效果:仅比较文件名中[之前的部分,返回除首个匹配文件之外的所有完整文件名列表用于删除。

最终解决方案

可通过按[前的子串分组,取每组排序第一的文件保留,其余文件删除即可,实现代码如下:

using System;
using System.IO;
using System.Linq;

public class Program
{
    public static void Main()
    {
        // 指定扫描目录路径
        string directoryPath = @"C:\temp\dups";
        // 读取目录下所有符合后缀的文件,此处示例匹配.mp3,可按需修改
        var allFiles = Directory.GetFiles(directoryPath, "*.mp3", SearchOption.AllDirectories);

        // 筛选需要保留的文件:先过滤文件名包含[的文件,按[前的前缀分组,取每组中排序第一的文件保留
        var toKeep = allFiles.Where(file => file.Contains('['))
                 .GroupBy(file => file.Remove(file.IndexOf('[')))
                 .Select(group => group.Min())
                 .ToHashSet();

        // 计算需要删除的文件:所有文件排除需要保留的部分
        var whatToDelete = allFiles.Except(toKeep);

        // 执行删除
        foreach (var fileToDelete in whatToDelete)
        {
            File.Delete(fileToDelete);
        }
    }
}

内容的提问来源于stack exchange,提问作者Ian Thompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:54:09