Files
sharpcompress/src/SharpCompress/Common/Zip/SeekableZipFilePart.cs

50 lines
1.2 KiB
C#

using System.IO;
using SharpCompress.Common.Zip.Headers;
namespace SharpCompress.Common.Zip;
internal class FileInfoZipFilePart : FilePart
{
internal FileInfoZipFilePart(
DirectoryEntryHeader header,
FileInfo file
)
: base(header.ArchiveEncoding)
{
}
}
internal class SeekableZipFilePart : ZipFilePart
{
private bool _isLocalHeaderLoaded;
private readonly SeekableZipHeaderFactory _headerFactory;
internal SeekableZipFilePart(
SeekableZipHeaderFactory headerFactory,
DirectoryEntryHeader header,
Stream stream
)
: base(header, stream) => _headerFactory = headerFactory;
internal override Stream GetCompressedStream()
{
if (!_isLocalHeaderLoaded)
{
LoadLocalHeader();
_isLocalHeaderLoaded = true;
}
return base.GetCompressedStream();
}
private void LoadLocalHeader() =>
Header = _headerFactory.GetLocalHeader(BaseStream, (DirectoryEntryHeader)Header);
protected override Stream CreateBaseStream()
{
BaseStream.Position = Header.DataStartPosition.NotNull();
return BaseStream;
}
}