mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-07-09 02:26:47 +00:00
47 lines
1.3 KiB
C#
47 lines
1.3 KiB
C#
using System.IO;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using SharpCompress.Common.Tar.Headers;
|
|
|
|
namespace SharpCompress.Common.Tar;
|
|
|
|
internal sealed class TarFilePart : FilePart
|
|
{
|
|
private readonly Stream? _seekableStream;
|
|
|
|
internal TarFilePart(TarHeader header, Stream? seekableStream)
|
|
: base(header.ArchiveEncoding)
|
|
{
|
|
_seekableStream = seekableStream;
|
|
Header = header;
|
|
}
|
|
|
|
internal TarHeader Header { get; }
|
|
|
|
internal override string? FilePartName => Header?.Name;
|
|
|
|
internal override Stream GetCompressedStream()
|
|
{
|
|
if (_seekableStream != null)
|
|
{
|
|
_seekableStream.Position = Header.DataStartPosition ?? 0;
|
|
return new TarReadOnlySubStream(_seekableStream, Header.Size);
|
|
}
|
|
return Header.PackedStream.NotNull();
|
|
}
|
|
|
|
internal override ValueTask<Stream?> GetCompressedStreamAsync(
|
|
CancellationToken cancellationToken = default
|
|
)
|
|
{
|
|
if (_seekableStream != null)
|
|
{
|
|
_seekableStream.Position = Header.DataStartPosition ?? 0;
|
|
return new ValueTask<Stream?>(new TarReadOnlySubStream(_seekableStream, Header.Size));
|
|
}
|
|
return new ValueTask<Stream?>(Header.PackedStream.NotNull());
|
|
}
|
|
|
|
internal override Stream? GetRawStream() => null;
|
|
}
|