编写一个重复文件的检测程序:程序可以实现重复文件检测(即将硬盘某个盘符下的重复文件以ListBox控件列表的形式显示出来,例如:有1.doc、2.doc、3.doc完全一样,则这三个应该放在同一个ListBox1控件中;而a.exe、b.exe完全一样,则放在另一个ListBox2控件中)(可由设计者自行设计分组)。
时间: 2023-06-16 13:08:26 浏览: 85
以下是一个基于哈希值的重复文件检测程序的示例代码,使用C#语言和WinForms界面库实现:
```csharp
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Windows.Forms;
namespace DuplicateFileDetector
{
public partial class MainForm : Form
{
private readonly Dictionary<string, List<string>> _fileGroups = new Dictionary<string, List<string>>();
public MainForm()
{
InitializeComponent();
}
private void browseButton_Click(object sender, EventArgs e)
{
var dialog = new FolderBrowserDialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
folderTextBox.Text = dialog.SelectedPath;
}
}
private void detectButton_Click(object sender, EventArgs e)
{
_fileGroups.Clear();
listBox1.Items.Clear();
listBox2.Items.Clear();
var dir = new DirectoryInfo(folderTextBox.Text);
var files = dir.GetFiles("*.*", SearchOption.AllDirectories);
foreach (var file in files)
{
var hash = ComputeHash(file.FullName);
if (_fileGroups.ContainsKey(hash))
{
_fileGroups[hash].Add(file.FullName);
}
else
{
_fileGroups.Add(hash, new List<string> {file.FullName});
}
}
var groupIndex = 0;
foreach (var group in _fileGroups.Values)
{
groupIndex++;
foreach (var file in group)
{
if (File.Exists(file))
{
if (group.Count == 1)
{
listBox1.Items.Add(file);
}
else
{
listBox2.Items.Add($"Group {groupIndex}: {file}");
}
}
}
}
}
private string ComputeHash(string filePath)
{
using var md5 = MD5.Create();
using var stream = File.OpenRead(filePath);
var hashBytes = md5.ComputeHash(stream);
return Convert.ToBase64String(hashBytes);
}
}
}
```
这个程序包含一个窗体 MainForm,其中有三个控件:一个 TextBox 和两个 ListBox。用户可以通过点击 Browse 按钮选择要检测的目录,然后点击 Detect 按钮开始检测。程序会递归遍历目录下的所有文件,计算每个文件的哈希值,并将哈希值相同的文件归为同一组。如果一个组中只有一个文件,则将其显示在 ListBox1 中;否则将该组中的所有文件显示在 ListBox2 中,并标注为同一组。用户可以通过 ListBox 中的文本来确定哪些文件是重复的。