在C#中,要刪除重復文件,可以使用以下方法:
using System.IO;
using System.Security.Cryptography;
using System.Text;
public static string CalculateHash(string path)
{
using (FileStream fs = new FileStream(path, FileMode.Open))
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] bytes = sha256.ComputeHash(fs);
StringBuilder builder = new StringBuilder();
foreach (byte b in bytes)
{
builder.Append(b.ToString("x2"));
}
return builder.ToString();
}
}
}
using System.Collections.Generic;
public static void RemoveDuplicateFiles(string directoryPath)
{
Dictionary<string, List<string>> fileHashes = new Dictionary<string, List<string>>();
// 遍歷目錄中的所有文件
foreach (string filePath in Directory.GetFiles(directoryPath))
{
string hash = CalculateHash(filePath);
// 如果哈希值已經在字典中,將文件路徑添加到對應的列表中
if (fileHashes.ContainsKey(hash))
{
fileHashes[hash].Add(filePath);
}
// 否則,創建一個新的鍵值對
else
{
fileHashes[hash] = new List<string> { filePath };
}
}
// 刪除重復的文件
foreach (var entry in fileHashes)
{
List<string> duplicateFiles = entry.Value;
if (duplicateFiles.Count > 1)
{
Console.WriteLine($"Deleting duplicate files with hash {entry.Key}:");
foreach (string duplicateFilePath in duplicateFiles)
{
try
{
File.Delete(duplicateFilePath);
Console.WriteLine($"Deleted: {duplicateFilePath}");
}
catch (Exception ex)
{
Console.WriteLine($"Error deleting {duplicateFilePath}: {ex.Message}");
}
}
}
}
}
RemoveDuplicateFiles
方法并傳入要檢查的目錄路徑。string directoryPath = @"C:\path\to\your\directory";
RemoveDuplicateFiles(directoryPath);
這將刪除指定目錄中的所有重復文件。請注意,這個方法只會刪除重復的文件,而不會刪除原始文件。如果你需要保留原始文件,可以在刪除之前添加一個條件來檢查文件名是否已經存在于目標目錄中。