C# 图标标注小工具-查看重复文件

目录

效果

项目

代码

下载


效果

项目

代码

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Windows.Forms;

namespace ImageDuplicate
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string FolderPath = "";
        List<ImgFileInfo> ltFile = new List<ImgFileInfo>();

        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();

            if (dialog.ShowDialog(this) != DialogResult.OK)
            {
                return;
            }

            textBox1.Text = "";
            FolderPath = "";
            ltFile.Clear();
            dataGridView1.DataSource = null;

            Application.DoEvents();

            button1.Enabled = false;
            button2.Enabled = false;

            FolderPath = dialog.SelectedPath + @"\";
            textBox1.Text = FolderPath;

            DirectoryInfo root = new DirectoryInfo(FolderPath);

            foreach (FileInfo f in root.GetFiles())
            {
                ltFile.Add(new ImgFileInfo(f.Name, GetFileMD5(FolderPath + f.Name)));
            }

            //var sortlist = ltFile.OrderBy(o => o.md5).ToList();

            var listGroup = ltFile.GroupBy(o => o.md5)
                .Select(g => (new
                {
                    md5 = g.Key,
                    num = g.Count(),
                    fileName = string.Join(",", g.Select(d => d.fileName))
                }))
                .OrderByDescending(o => o.num)
                .ThenBy(o => o.md5)
                .ToList();

            dataGridView1.DataSource = listGroup;

            //自适应所有列的宽度
            //dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

            dataGridView1.Columns[0].Width = 300;
            dataGridView1.Columns[1].Width = 50;
            dataGridView1.Columns[2].Width = 850;

            button1.Enabled = true;
            button2.Enabled = true;

        }

        public static string GetFileMD5(string path)
        {
            if (!System.IO.File.Exists(path)) return "";
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);
            MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
            byte[] buffer = md5Provider.ComputeHash(fs);
            string resule = BitConverter.ToString(buffer);
            md5Provider.Clear();
            fs.Close();
            return resule;
        }

        /// <summary>
        /// 去重复
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {

        }
    }
}

下载

源码下载

相关推荐

  1. C++:查找重复文件

    2023-12-28 20:14:03       7 阅读
  2. c++防止头文件重复

    2023-12-28 20:14:03       5 阅读
  3. C++】防止头文件重复包含

    2023-12-28 20:14:03       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-28 20:14:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-28 20:14:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-28 20:14:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-28 20:14:03       20 阅读

热门阅读

  1. css吸顶(position: sticky;)

    2023-12-28 20:14:03       62 阅读
  2. 【排序算法】合并两个有序数组

    2023-12-28 20:14:03       31 阅读
  3. MongoDB

    MongoDB

    2023-12-28 20:14:03      39 阅读
  4. Tekton

    Tekton

    2023-12-28 20:14:03      34 阅读
  5. MongoDB中的物化视图

    2023-12-28 20:14:03       39 阅读
  6. 2022年全国职业院校技能大赛软件测试赛项赛题库

    2023-12-28 20:14:03       39 阅读
  7. Linux安装mysql

    2023-12-28 20:14:03       37 阅读
  8. 全国计算机等级考试| 二级Python | 真题及解析(1)

    2023-12-28 20:14:03       31 阅读
  9. 机器学习概述(一)

    2023-12-28 20:14:03       23 阅读
  10. 备忘录模式(Memento)

    2023-12-28 20:14:03       39 阅读