public void ReadWithSeeking() { int NumberOfBytes = AsyncFileStream.DefaultBufferSize * 2; string path = GetFullPath("file"); FileStreamValidation.WriteValidatableFile(path, NumberOfBytes); byte[] buffer = new byte[NumberOfBytes]; WithReadableStream( path, async stream => { // Here we ping-pong around in the stream doing reads less than the buffer size. // The intent is to verify that seeking properly flushes the partially-full read buffer. // Read 1/4 of the stream, starting halfway stream.Seek(AsyncFileStream.DefaultBufferSize, SeekOrigin.Begin); await Read(stream, buffer, offset: AsyncFileStream.DefaultBufferSize, count: AsyncFileStream.DefaultBufferSize / 2); // Read 1/4 of the stream, starting at the beginning stream.Seek(0, SeekOrigin.Begin); await Read(stream, buffer, offset: 0, count: AsyncFileStream.DefaultBufferSize / 2); // Read 1/4 of the stream, again from the second half stream.Seek(AsyncFileStream.DefaultBufferSize + (AsyncFileStream.DefaultBufferSize / 2), SeekOrigin.Begin); await Read(stream, buffer, offset: AsyncFileStream.DefaultBufferSize + (AsyncFileStream.DefaultBufferSize / 2), count: AsyncFileStream.DefaultBufferSize / 2); // Read 1/4 of the stream, again from the first half stream.Seek(AsyncFileStream.DefaultBufferSize / 2, SeekOrigin.Begin); await Read(stream, buffer, offset: AsyncFileStream.DefaultBufferSize / 2, count: AsyncFileStream.DefaultBufferSize / 2); }); FileStreamValidation.ValidateBuffer(buffer, NumberOfBytes); }
private static void VerifyReadingValidatableFile(string path, int numberOfBytes, int readSize) { FileStreamValidation.WriteValidatableFile(path, numberOfBytes); using (var targetStream = new MemoryStream()) { CopyReadableStream(path, readSize, targetStream); FileStreamValidation.ValidateStream(targetStream, numberOfBytes); } }