/// <inheritdoc /> public Task <bool> VerifyChecksumAsync(string fileId, string algorithm, byte[] checksum, CancellationToken cancellationToken) { bool valid; using (var stream = new FileStream(GetPath(fileId), FileMode.Open, FileAccess.ReadWrite)) { valid = checksum.SequenceEqual(stream.CalculateSha1()); // ReSharper disable once InvertIf if (!valid && _lengthBeforeWrite.ContainsKey(fileId)) { stream.Seek(0, SeekOrigin.Begin); stream.SetLength(_lengthBeforeWrite[fileId]); _lengthBeforeWrite.Remove(fileId); } } return(Task.FromResult(valid)); }
/// <inheritdoc /> public Task <bool> VerifyChecksumAsync(string fileId, string algorithm, byte[] checksum, CancellationToken cancellationToken) { bool valid; using (var stream = new FileStream(GetPath(fileId), FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) { var chunkPositionFile = _fileRepFactory.ChunkStartPosition(fileId); var chunkStartPosition = chunkPositionFile.ReadFirstLineAsLong(true, 0); stream.Seek(chunkStartPosition, SeekOrigin.Begin); var calculateSha1 = stream.CalculateSha1(chunkStartPosition); valid = checksum.SequenceEqual(calculateSha1); if (!valid) { stream.Seek(0, SeekOrigin.Begin); stream.SetLength(chunkStartPosition); chunkPositionFile.Delete(); _fileRepFactory.ChunkComplete(fileId).Delete(); } } return(Task.FromResult(valid)); }