Как вычислить значения MD5 всех файлов в системе с помощью C#?
Я хочу вычислить MD5 для всех файлов системы.
Что я уже пробовал:
using System.IO; using System.Security.Cryptography;
public static class Algorithms { public static readonly HashAlgorithm MD5 = new MD5CryptoServiceProvider(); } public static string GetChecksum(string filePath, HashAlgorithm algorithm) { using (var stream = new BufferedStream(File.OpenRead(filePath), 100000)) { byte[] hash = algorithm.ComputeHash(stream); return BitConverter.ToString(hash).Replace("-", String.Empty); } }
Я использую это для расчета для конкретного файла.
string path = @"C:\Folder\file.txt"; string checksumMd5 = GetChecksum(path, Algorithms.MD5);
Jochen Arndt
В чем проблема?
Для рекурсивного поиска файлов выполните поиск "c# recursive file search".
Для перечисления дисков используйте метод DriveInfo. GetDrives ().
Затем выполните рекурсивный поиск файлов для каждого диска, начиная с корня ("<drive_letter:\ & gt;")
Но имейте в виду, что обработка всех файлов будет трудоемким процессом (это может занять несколько дней).
kuharan
У меня есть идея составить список файлов с помощью команд windows и поместить их в текстовый файл. Затем прочтите этот текстовый файл.
Jochen Arndt
Я все еще не понимаю, где у тебя проблемы.
kuharan
У меня нет проблем. Я надеялся, что есть более быстрый способ расчета.
Dave Kreskowiak
Быстрее? Нет, вы все равно будете читать каждый байт каждого доступного файла в системе. Это могут быть сотни тысяч или миллионы файлов.
Вы можете получить преимущество потоковой передачи, чтобы читать несколько файлов и выполнять вычисления MD5 по байтам для каждого, но имейте в виду, что диск-это последовательное устройство. Только один поток будет получать нужные ему данные за один раз.
Но нет никакого способа ускорить вычисление по одному файлу. Вы можете только создать иллюзию ускорения, делая несколько файлов одновременно.