Как вычеслить прогресс хеширования System.IO.Hashing?
Хочу перейти с неофициальных реализаций хэш-функций на официальный System.IO.Hashing. Но я совершенно не понимаю, как сделать чтобы осуществлялся рапорт о прогрессе хэширования? Намерен использовать алгоритм XxHash3, но думаю что это не важно.
На данный момент я высчитываю хэш так (без отображения прогресса):
private string GetXxHash3(string filename)
{
var hashAlgorithm = new XxHash3();
using (Stream entryStream = System.IO.File.OpenRead(filename))
hashAlgorithm.Append(entryStream);
return BitConverter.ToString(hashAlgorithm.GetHashAndReset()).Replace("-", string.Empty);
}
Ответы (1 шт):
Автор решения: Raf-9600
→ Ссылка
Нашёл решение:
string GetXxHash3(string filename, IProgress<long> progress)
{
var hashAlgorithm = new XxHash3();
using (Stream entryStream = File.OpenRead(filename))
{
byte[] buffer = ArrayPool<byte>.Shared.Rent(4096); // use whatever chunk size you want
int bytesRead;
long totalRead = 0;
while ((bytesRead = entryStream.Read(buffer)) > 0)
{
hashAlgorithm.Append(buffer.AsSpan(0, bytesRead));
totalRead += bytesRead;
progress.Report(totalRead);
}
ArrayPool<byte>.Shared.Return(buffer);
}
return Convert.ToHexString(hashAlgorithm.GetHashAndReset());
}