kuharan Ответов: 1

Как вычислить значения 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 по байтам для каждого, но имейте в виду, что диск-это последовательное устройство. Только один поток будет получать нужные ему данные за один раз.

Но нет никакого способа ускорить вычисление по одному файлу. Вы можете только создать иллюзию ускорения, делая несколько файлов одновременно.

1 Ответов

Рейтинг:
11

Matt Comb

Это правильный подход, нет реестра хэширования файлов, поддерживаемого операционной системой изначально


0x01AA

Что?

Matt Comb

Ни Windows, ни NTFS, ни FAT не вычисляют хэш файла в момент создания или изменения файла. Наличие хэш-реестра такого рода-это единственный способ найти более быстрое решение, чем сканирование файлов и вычисление хэшей вручную.Есть некоторые файловые системы, которые поддерживают его, но они недоступны для Windows.