/// <summary> /// </summary> /// <param name="Algo"></param> public byte[] ComputeLargeStreamHash(Stream Stream, RateTracker Tracker, ChecksumProgressEventHandler Callback) { // Buffer size optimized for reading massive files. byte[] buffer = MemoryPool.AllocBuffer(BufferSize); int bytesRead; do { bytesRead = Stream.Read(buffer, 0, BufferSize); if (bytesRead > 0) { HashCore(buffer, 0, bytesRead); if (Callback != null) { Callback?.Invoke(bytesRead); } if (Tracker != null) { Tracker.Out(bytesRead); } } } while (bytesRead > 0); HashValue = HashFinal(); byte[] Tmp = (byte[])HashValue.Clone(); Initialize(); MemoryPool.ReleaseBuffer(buffer); return(Tmp); }
/// <summary> /// </summary> /// <param name="FilePath"></param> /// <returns></returns> public static string GetChecksum(string FilePath, RateTracker Tracker, ChecksumProgressEventHandler Callback = null) { using (SHA1Extended crc = new SHA1Extended()) { using (FileStream stream = File.Open(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { byte[] hash = crc.ComputeLargeStreamHash(stream, Tracker, Callback); return(BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant()); } } }