private HashAlgorithm CreateHashAlgorithm(FileHashAlgorithm hashAlgorithm) { switch (hashAlgorithm) { case FileHashAlgorithm.MD5: return(MD5.Create()); case FileHashAlgorithm.SHA1: return(SHA1.Create()); case FileHashAlgorithm.SHA256: return(SHA256.Create()); case FileHashAlgorithm.SHA384: return(SHA384.Create()); case FileHashAlgorithm.SHA512: return(SHA512.Create()); case FileHashAlgorithm.CRC32: return(new Crc32Algorithm()); default: throw new ArgumentOutOfRangeException(nameof(hashAlgorithm), hashAlgorithm, null); } }
public Task <byte[]> ComputeAsync(string path, FileHashAlgorithm hashAlgorithm) { try { using (var fileStream = System.IO.File.OpenRead(path)) using (var progressingStream = new ProgressingReadStream(fileStream, OnProgressChanged)) using (var hash = CreateHashAlgorithm(hashAlgorithm)) using (_cancellationTokenSource.Token.Register(() => fileStream.Dispose())) { var result = hash.ComputeHash(progressingStream); return(Task.FromResult(result)); } } catch (Exception) when(_cancellationTokenSource.IsCancellationRequested) { return(null); } }
public static HashAlgorithm CreateHashAlgorithm(this FileHashAlgorithm algorithm) { switch (algorithm) { case FileHashAlgorithm.SHA256: return(SHA256.Create()); case FileHashAlgorithm.SHA512: return(SHA512.Create()); case FileHashAlgorithm.SHA1: return(SHA1.Create()); case FileHashAlgorithm.MD5: return(MD5.Create()); case FileHashAlgorithm.CRC32: return(new Crc32Algorithm()); default: throw new ArgumentOutOfRangeException(); } }
public ComputeHashViewModel(string path, FileHashAlgorithm hashAlgorithm, ITargetedRestClient restClient) { _path = path; HashAlgorithm = hashAlgorithm; _restClient = restClient; }