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