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

50 lines
1.2 KiB
C#
Raw Normal View History

2022-12-20 15:06:44 +00:00
using System.IO;
2015-12-30 11:19:42 +00:00
using SharpCompress.Common.Zip.Headers;
2022-12-20 15:06:44 +00:00
namespace SharpCompress.Common.Zip;
internal class FileInfoZipFilePart : FilePart
{
internal FileInfoZipFilePart(
DirectoryEntryHeader header,
FileInfo file
)
: base(header.ArchiveEncoding)
{
}
}
2022-12-20 15:06:44 +00:00
internal class SeekableZipFilePart : ZipFilePart
2015-12-30 11:19:42 +00:00
{
2022-12-20 15:06:44 +00:00
private bool _isLocalHeaderLoaded;
private readonly SeekableZipHeaderFactory _headerFactory;
internal SeekableZipFilePart(
SeekableZipHeaderFactory headerFactory,
DirectoryEntryHeader header,
Stream stream
2023-03-21 13:14:08 +00:00
)
: base(header, stream) => _headerFactory = headerFactory;
2015-12-30 11:19:42 +00:00
2022-12-20 15:06:44 +00:00
internal override Stream GetCompressedStream()
{
if (!_isLocalHeaderLoaded)
2015-12-30 11:19:42 +00:00
{
2022-12-20 15:06:44 +00:00
LoadLocalHeader();
_isLocalHeaderLoaded = true;
2015-12-30 11:19:42 +00:00
}
2022-12-20 15:06:44 +00:00
return base.GetCompressedStream();
}
2015-12-30 11:19:42 +00:00
private void LoadLocalHeader() =>
Header = _headerFactory.GetLocalHeader(BaseStream, (DirectoryEntryHeader)Header);
2015-12-30 11:19:42 +00:00
2022-12-20 15:06:44 +00:00
protected override Stream CreateBaseStream()
{
2024-04-22 14:17:08 +01:00
BaseStream.Position = Header.DataStartPosition.NotNull();
2022-12-20 15:06:44 +00:00
return BaseStream;
2015-12-30 11:19:42 +00:00
}
2022-12-20 13:45:47 +00:00
}