Class PositionWrapperStream
Namespace: Casewhere.Common
Assembly: Casewhere.Common.dll
Reading Position should be supported only for seekable streams, but ZipArchive seems to require this even from non-seekable streams, which is a bug (This bug fixed on .NET Core 2.0). So, we need to do to support writing ZIP files directly to OutputStream is to wrap it in a custom Stream that supports getting Position.
public class PositionWrapperStream : Stream, IDisposable
Inheritance
object ← MarshalByRefObject ← Stream ← PositionWrapperStream
Implements
Inherited Members
Stream.Null, Stream.CopyToAsync(Stream), Stream.CopyToAsync(Stream, int), Stream.CopyToAsync(Stream, int, CancellationToken), Stream.CopyTo(Stream), Stream.CopyTo(Stream, int), Stream.Close(), Stream.Dispose(), Stream.Dispose(bool), Stream.Flush(), Stream.FlushAsync(), Stream.FlushAsync(CancellationToken), Stream.CreateWaitHandle(), Stream.BeginRead(byte[], int, int, AsyncCallback, object), Stream.EndRead(IAsyncResult), Stream.ReadAsync(byte[], int, int), Stream.ReadAsync(byte[], int, int, CancellationToken), Stream.BeginWrite(byte[], int, int, AsyncCallback, object), Stream.EndWrite(IAsyncResult), Stream.WriteAsync(byte[], int, int), Stream.WriteAsync(byte[], int, int, CancellationToken), Stream.Seek(long, SeekOrigin), Stream.SetLength(long), Stream.Read(byte[], int, int), Stream.ReadByte(), Stream.Write(byte[], int, int), Stream.WriteByte(byte), Stream.Synchronized(Stream), Stream.ObjectInvariant(), Stream.CanRead, Stream.CanSeek, Stream.CanTimeout, Stream.CanWrite, Stream.Length, Stream.Position, Stream.ReadTimeout, Stream.WriteTimeout, MarshalByRefObject.MemberwiseClone(bool), MarshalByRefObject.GetLifetimeService(), MarshalByRefObject.InitializeLifetimeService(), MarshalByRefObject.CreateObjRef(Type), object.ToString(), object.Equals(object), object.Equals(object, object), object.ReferenceEquals(object, object), object.GetHashCode(), object.GetType(), object.MemberwiseClone()
Extension Methods
ObjectExtension.ConvertToBsonValue(object), EnumExtensions.DeepClone<PositionWrapperStream>(PositionWrapperStream)
Constructors
PositionWrapperStream(Stream)
public PositionWrapperStream(Stream wrapped)
Parameters
wrapped
Stream
Properties
CanRead
public override bool CanRead { get; }
Property Value
CanSeek
public override bool CanSeek { get; }
Property Value
CanWrite
public override bool CanWrite { get; }
Property Value
Length
public override long Length { get; }
Property Value
Position
public override long Position { get; set; }
Property Value
Methods
Dispose(bool)
protected override void Dispose(bool disposing)
Parameters
disposing
bool
Flush()
public override void Flush()
Read(byte[], int, int)
public override int Read(byte[] buffer, int offset, int count)
Parameters
buffer
byte[]
offset
int
count
int
Returns
Seek(long, SeekOrigin)
public override long Seek(long offset, SeekOrigin origin)
Parameters
offset
long
origin
SeekOrigin
Returns
SetLength(long)
public override void SetLength(long value)
Parameters
value
long
Write(byte[], int, int)
public override void Write(byte[] buffer, int offset, int count)
Parameters
buffer
byte[]
offset
int
count
int