public static Tuple<List<uint>, List<byte[]>, List<long>> DigestOldFile(string path) { using (var file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None)) using (var stream = new BlockByBlockStreamReader(file, BlockSize)) { var ret = new Tuple<List<uint>, List<byte[]>, List<long>>(new List<uint>(), new List<byte[]>(), new List<long>()); var md5 = MD5.Create(); byte[] block; for (long offset = 0; (block = stream.NextBlock()) != null; offset += block.Length) { var checksum = RollingChecksum(block); var hash = md5.ComputeHash(block); ret.Item1.Add(checksum); ret.Item2.Add(hash); ret.Item3.Add(offset); } return ret.Sort(); } }