溫馨提示×

c# removeall如何刪除重復文件

c#
小樊
118
2024-11-30 02:27:16
欄目: 編程語言

在C#中,要刪除重復文件,可以使用以下方法:

  1. 首先,創建一個方法來計算文件的哈希值。這將幫助我們識別重復的文件。
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();
        }
    }
}
  1. 然后,創建一個方法來刪除重復的文件。這個方法將接受一個文件路徑和一個字典作為參數。字典的鍵將是文件的哈希值,值將是一個包含具有相同哈希值的所有文件路徑的列表。
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}");
                }
            }
        }
    }
}
  1. 最后,調用RemoveDuplicateFiles方法并傳入要檢查的目錄路徑。
string directoryPath = @"C:\path\to\your\directory";
RemoveDuplicateFiles(directoryPath);

這將刪除指定目錄中的所有重復文件。請注意,這個方法只會刪除重復的文件,而不會刪除原始文件。如果你需要保留原始文件,可以在刪除之前添加一個條件來檢查文件名是否已經存在于目標目錄中。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女