Skip to content

megasoch/file-signature-generator

Repository files navigation

Задание

Требуется написать консольную программу на C# для генерации сигнатуры указанного файла. Сигнатура генерируется следующим образом: исходный файл делится на блоки заданной длины (кроме последнего блока), для каждого блока вычисляется значение hash-функции SHA256, и вместе с его номером выводится в консоль.

Программа должна уметь обрабатывать файлы, размер которых превышает объем оперативной памяти, и при этом максимально эффективно использовать вычислительные мощности многопроцессорной системы. При работе с потоками допускается использовать только стандартные классы и библиотеки из .Net 3.5 (исключая ThreadPool, BackgroundWorker, TPL). Ожидается реализация с использованием Thread-ов. Путь до входного файла и размер блока задаются в командной строке. В случае возникновения ошибки во время выполнения программы ее текст и StackTrace необходимо вывести в консоль.

Алгоритм работы программы

Используется 2 байтовых буфера по 32Мб по умолчанию(ByteBuffer.cs), первый - для чтения файла с диска, второй - для обработки прочитанных данных.

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

В потоке обработки создаются дополнительные потоки для параллельного подсчета хэша. Количество потоков считающих хэш, зависит от числа ядер процессора. Для последовательного вывода хэшей используется Dictionary<номер_блока, хэш>.

Файл читается(FileByteInputer.cs) блоками заданного размера(64Кб).

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages