2015-12-30 11:19:42 +00:00
|
|
|
|
using System.IO;
|
|
|
|
|
|
using SharpCompress.Common.Zip.Headers;
|
2016-09-26 11:49:49 +01:00
|
|
|
|
using SharpCompress.Compressors.Deflate;
|
2015-12-30 11:19:42 +00:00
|
|
|
|
using SharpCompress.IO;
|
|
|
|
|
|
|
|
|
|
|
|
namespace SharpCompress.Common.Zip
|
|
|
|
|
|
{
|
|
|
|
|
|
internal class StreamingZipFilePart : ZipFilePart
|
|
|
|
|
|
{
|
|
|
|
|
|
private Stream decompressionStream;
|
|
|
|
|
|
|
|
|
|
|
|
internal StreamingZipFilePart(ZipFileEntry header, Stream stream)
|
|
|
|
|
|
: base(header, stream)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override Stream CreateBaseStream()
|
|
|
|
|
|
{
|
|
|
|
|
|
return Header.PackedStream;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
internal override Stream GetCompressedStream()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!Header.HasData)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Stream.Null;
|
|
|
|
|
|
}
|
2017-05-23 16:10:15 +01:00
|
|
|
|
decompressionStream = CreateDecompressionStream(GetCryptoStream(CreateBaseStream()), Header.CompressionMethod);
|
2015-12-30 11:19:42 +00:00
|
|
|
|
if (LeaveStreamOpen)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new NonDisposingStream(decompressionStream);
|
|
|
|
|
|
}
|
|
|
|
|
|
return decompressionStream;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
internal BinaryReader FixStreamedFileLocation(ref RewindableStream rewindableStream)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (Header.IsDirectory)
|
|
|
|
|
|
{
|
|
|
|
|
|
return new BinaryReader(rewindableStream);
|
|
|
|
|
|
}
|
|
|
|
|
|
if (Header.HasData)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (decompressionStream == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
decompressionStream = GetCompressedStream();
|
|
|
|
|
|
}
|
2017-07-17 10:55:22 -04:00
|
|
|
|
decompressionStream.Skip();
|
2015-12-30 11:19:42 +00:00
|
|
|
|
|
|
|
|
|
|
DeflateStream deflateStream = decompressionStream as DeflateStream;
|
|
|
|
|
|
if (deflateStream != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
rewindableStream.Rewind(deflateStream.InputBuffer);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
var reader = new BinaryReader(rewindableStream);
|
|
|
|
|
|
decompressionStream = null;
|
|
|
|
|
|
return reader;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2013-04-28 12:32:55 +01:00
|
|
|
|
}
|