diff --git a/src/SharpCompress/Common/CompressionType.cs b/src/SharpCompress/Common/CompressionType.cs
index 59583423..f9b63855 100644
--- a/src/SharpCompress/Common/CompressionType.cs
+++ b/src/SharpCompress/Common/CompressionType.cs
@@ -9,6 +9,7 @@ public enum CompressionType
Deflate,
Rar,
LZMA,
+ LZMA2,
BCJ,
BCJ2,
LZip,
diff --git a/src/SharpCompress/Common/SevenZip/SevenZipStreamsCompressor.cs b/src/SharpCompress/Common/SevenZip/SevenZipStreamsCompressor.cs
index 6b17a064..636fdfb0 100644
--- a/src/SharpCompress/Common/SevenZip/SevenZipStreamsCompressor.cs
+++ b/src/SharpCompress/Common/SevenZip/SevenZipStreamsCompressor.cs
@@ -29,14 +29,15 @@ internal sealed class SevenZipStreamsCompressor(Stream outputStream)
/// Returns a PackedStream containing folder metadata, compressed size, and CRCs.
///
/// Uncompressed data to compress.
- /// True for LZMA2, false for LZMA.
+ /// Compression method (LZMA or LZMA2).
/// LZMA encoder properties (null for defaults).
public PackedStream Compress(
Stream inputStream,
- bool isLzma2,
+ CompressionType compressionType,
LzmaEncoderProperties? encoderProperties = null
)
{
+ var isLzma2 = compressionType == CompressionType.LZMA2;
encoderProperties ??= new LzmaEncoderProperties(eos: !isLzma2);
var outStartOffset = outputStream.Position;
diff --git a/src/SharpCompress/Writers/SevenZip/SevenZipWriter.cs b/src/SharpCompress/Writers/SevenZip/SevenZipWriter.cs
index ae42318f..740f7a65 100644
--- a/src/SharpCompress/Writers/SevenZip/SevenZipWriter.cs
+++ b/src/SharpCompress/Writers/SevenZip/SevenZipWriter.cs
@@ -77,7 +77,7 @@ public partial class SevenZipWriter : AbstractWriter
var compressor = new SevenZipStreamsCompressor(OutputStream.NotNull());
var packed = compressor.Compress(
progressStream,
- isLzma2: sevenZipOptions.IsLzma2,
+ sevenZipOptions.CompressionType,
sevenZipOptions.LzmaProperties
);
packedStreams.Add(packed);
@@ -161,7 +161,7 @@ public partial class SevenZipWriter : AbstractWriter
var headerCompressor = new SevenZipStreamsCompressor(output);
var headerPacked = headerCompressor.Compress(
rawHeaderStream,
- isLzma2: false,
+ CompressionType.LZMA,
sevenZipOptions.LzmaProperties
);
diff --git a/src/SharpCompress/Writers/SevenZip/SevenZipWriterOptions.cs b/src/SharpCompress/Writers/SevenZip/SevenZipWriterOptions.cs
index 65202d20..033f07fd 100644
--- a/src/SharpCompress/Writers/SevenZip/SevenZipWriterOptions.cs
+++ b/src/SharpCompress/Writers/SevenZip/SevenZipWriterOptions.cs
@@ -15,12 +15,22 @@ public sealed record SevenZipWriterOptions : IWriterOptions
private int _compressionLevel;
///
- /// The compression type to use. Supported: LZMA (default), LZMA2 (via CompressionType.LZMA with IsLzma2=true).
+ /// The compression type to use. Supported: LZMA and LZMA2 (default).
///
public CompressionType CompressionType
{
get => _compressionType;
- init => _compressionType = value;
+ init
+ {
+ if (value != CompressionType.LZMA && value != CompressionType.LZMA2)
+ {
+ throw new ArgumentException(
+ $"SevenZipWriter only supports CompressionType.LZMA and CompressionType.LZMA2. Got: {value}",
+ nameof(value)
+ );
+ }
+ _compressionType = value;
+ }
}
///
@@ -54,11 +64,6 @@ public sealed record SevenZipWriterOptions : IWriterOptions
public CompressionProviderRegistry Providers { get; init; } =
CompressionProviderRegistry.Default;
- ///
- /// Whether to use LZMA2 instead of LZMA. Default is false (LZMA).
- ///
- public bool IsLzma2 { get; init; }
-
///
/// Whether to compress the archive header itself using LZMA.
/// Default is true, matching standard 7-Zip behavior.
@@ -71,11 +76,11 @@ public sealed record SevenZipWriterOptions : IWriterOptions
public LzmaEncoderProperties? LzmaProperties { get; init; }
///
- /// Creates a new SevenZipWriterOptions instance with LZMA compression.
+ /// Creates a new SevenZipWriterOptions instance with LZMA2 compression (default).
///
public SevenZipWriterOptions()
{
- CompressionType = CompressionType.LZMA;
+ CompressionType = CompressionType.LZMA2;
}
///
diff --git a/tests/SharpCompress.Test/SevenZip/SevenZipWriterTests.cs b/tests/SharpCompress.Test/SevenZip/SevenZipWriterTests.cs
index 43aa6dc6..8f6fdec5 100644
--- a/tests/SharpCompress.Test/SevenZip/SevenZipWriterTests.cs
+++ b/tests/SharpCompress.Test/SevenZip/SevenZipWriterTests.cs
@@ -168,7 +168,7 @@ public class SevenZipWriterTests : TestBase
using (var writer = new SevenZipWriter(
archiveStream,
- new SevenZipWriterOptions { IsLzma2 = true }
+ new SevenZipWriterOptions(CompressionType.LZMA2)
))
{
using var source = new MemoryStream(content);
@@ -206,7 +206,7 @@ public class SevenZipWriterTests : TestBase
using (var writer = new SevenZipWriter(
archiveStream,
- new SevenZipWriterOptions { IsLzma2 = true }
+ new SevenZipWriterOptions(CompressionType.LZMA2)
))
{
foreach (var (name, text) in files)
@@ -251,7 +251,7 @@ public class SevenZipWriterTests : TestBase
using (var writer = new SevenZipWriter(
archiveStream,
- new SevenZipWriterOptions { IsLzma2 = true }
+ new SevenZipWriterOptions(CompressionType.LZMA2)
))
{
using var source = new MemoryStream(content);
@@ -288,7 +288,7 @@ public class SevenZipWriterTests : TestBase
using (var writer = new SevenZipWriter(
archiveStream,
- new SevenZipWriterOptions { IsLzma2 = true }
+ new SevenZipWriterOptions(CompressionType.LZMA2)
))
{
using var source = new MemoryStream(content);
@@ -311,6 +311,14 @@ public class SevenZipWriterTests : TestBase
}
}
+ [Fact]
+ public void SevenZipWriter_UnsupportedCompressionType_Throws()
+ {
+ Assert.Throws(
+ () => new SevenZipWriterOptions(CompressionType.Deflate)
+ );
+ }
+
[Fact]
public void SevenZipWriter_UncompressedHeader_RoundTrip()
{