Согласно документации для ReadAllBytes , первый параметр:
путь. String Файл, который нужно открыть для чтения.
Таким образом, вы должны указать путь к файлу , а не путь к чему-либо еще. Каталог, конечно, не файл, поэтому он не будет работать.
Я не уверен, что вы подразумеваете под "хэшем каталога", но мне кажется, что вам, возможно, придется открыть отдельные файлы (в детерминированном порядке), объединить их байты, а затем запустить алгоритм хеширования для всего этого , т.е. генерировать виртуальный поток байтов, содержащий весь набор файлов.
var virtualByteStream = Directory
.GetFiles(path)
.OrderBy( p => p )
.SelectMany
(
p => p.ReadAllbytes()
);
var hash = md5Hash.ComputeHash(virtualByteStream.ToArray());
Обратите внимание, что этот подход не включает метаданные файла (например, DateModified), поэтому, если это важно для вас, вам нужно будет включить его и любые другие метаданные во входные данные хэша.
(Если ваши файлы большие, вы можете найти способ избежать вызова ToArray()
и использовать вместо него ComputeHash(Stream)
. Но это выходит за рамки этого ответа.)