<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

RestartableFileStream

Restartable FileStream.
using System.IO; namespace Relativity.DataExchange.Data { internal class RestartableFileStream : Stream { private readonly string filename; private FileStream stream; private long restartPosition; public override bool CanRead => stream.CanRead; public override bool CanSeek => stream.CanSeek; public override bool CanWrite => stream.CanWrite; public override long Length => stream.Length; public override long Position { get { return stream.Position; } set { stream.Position = value; } } public RestartableFileStream(string filename) { this.filename = filename; stream = OpenFileStream(filename); } public void Restart() { stream.Dispose(); stream = OpenFileStream(filename); stream.Seek(restartPosition, SeekOrigin.Begin); } public override void Flush() { stream.Flush(); } public override long Seek(long offset, SeekOrigin origin) { return stream.Seek(offset, origin); } public override void SetLength(long value) { stream.SetLength(value); } public override int Read(byte[] buffer, int offset, int count) { restartPosition = stream.Position; int result = stream.Read(buffer, offset, count); restartPosition = stream.Position; return result; } public override void Write(byte[] buffer, int offset, int count) { stream.Write(buffer, offset, count); } protected override void Dispose(bool disposing) { if (disposing) stream.Dispose(); base.Dispose(disposing); } private static FileStream OpenFileStream(string filename) { return new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read, 32768, FileOptions.SequentialScan); } } }