2 using SharpCompress.Common;
4 namespace SharpCompress.IO
6 internal class ListeningStream : Stream
8 private long currentEntryTotalReadBytes;
9 private IExtractionListener listener;
11 public ListeningStream(IExtractionListener listener, Stream stream)
14 this.listener = listener;
17 protected override void Dispose(bool disposing)
25 public Stream Stream { get; private set; }
27 public override bool CanRead
29 get { return Stream.CanRead; }
32 public override bool CanSeek
34 get { return Stream.CanSeek; }
37 public override bool CanWrite
39 get { return Stream.CanWrite; }
42 public override void Flush()
47 public override long Length
49 get { return Stream.Length; }
52 public override long Position
54 get { return Stream.Position; }
55 set { Stream.Position = value; }
58 public override int Read(byte[] buffer, int offset, int count)
60 int read = Stream.Read(buffer, offset, count);
61 currentEntryTotalReadBytes += read;
62 listener.FireCompressedBytesRead(currentEntryTotalReadBytes, currentEntryTotalReadBytes);
66 public override long Seek(long offset, SeekOrigin origin)
68 return Stream.Seek(offset, origin);
71 public override void SetLength(long value)
73 Stream.SetLength(value);
76 public override void Write(byte[] buffer, int offset, int count)
78 Stream.Write(buffer, offset, count);