45 lines
1.3 KiB
C#
45 lines
1.3 KiB
C#
|
using System.IO;
|
|||
|
using SharpCompress.Common.Zip.Headers;
|
|||
|
|
|||
|
namespace SharpCompress.Common.Zip
|
|||
|
{
|
|||
|
internal class SeekableZipFilePart : ZipFilePart
|
|||
|
{
|
|||
|
private bool isLocalHeaderLoaded;
|
|||
|
private readonly SeekableZipHeaderFactory headerFactory;
|
|||
|
|
|||
|
internal SeekableZipFilePart(SeekableZipHeaderFactory headerFactory, DirectoryEntryHeader header, Stream stream)
|
|||
|
: base(header, stream)
|
|||
|
{
|
|||
|
this.headerFactory = headerFactory;
|
|||
|
}
|
|||
|
|
|||
|
internal override Stream GetCompressedStream()
|
|||
|
{
|
|||
|
if (!isLocalHeaderLoaded)
|
|||
|
{
|
|||
|
LoadLocalHeader();
|
|||
|
isLocalHeaderLoaded = true;
|
|||
|
}
|
|||
|
return base.GetCompressedStream();
|
|||
|
}
|
|||
|
|
|||
|
internal string Comment
|
|||
|
{
|
|||
|
get { return (Header as DirectoryEntryHeader).Comment; }
|
|||
|
}
|
|||
|
|
|||
|
private void LoadLocalHeader()
|
|||
|
{
|
|||
|
bool hasData = Header.HasData;
|
|||
|
Header = headerFactory.GetLocalHeader(BaseStream, Header as DirectoryEntryHeader);
|
|||
|
Header.HasData = hasData;
|
|||
|
}
|
|||
|
|
|||
|
protected override Stream CreateBaseStream()
|
|||
|
{
|
|||
|
BaseStream.Position = Header.DataStartPosition.Value;
|
|||
|
return BaseStream;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|