Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 /// <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());
         }
     }
 }