diff --git a/src/SharpCompress/Archives/AbstractWritableArchive.cs b/src/SharpCompress/Archives/AbstractWritableArchive.cs index ae58f6f0..5a32ef0e 100644 --- a/src/SharpCompress/Archives/AbstractWritableArchive.cs +++ b/src/SharpCompress/Archives/AbstractWritableArchive.cs @@ -86,12 +86,12 @@ public abstract partial class AbstractWritableArchive } } - void IWritableArchive.RemoveEntry(IArchiveEntry entry) => RemoveEntry((TEntry)entry); + void IWritableArchive.RemoveEntry(IArchiveEntry entry) => RemoveEntry((TEntry)entry); public TEntry AddEntry(string key, Stream source, long size = 0, DateTime? modified = null) => AddEntry(key, source, false, size, modified); - IArchiveEntry IWritableArchive.AddEntry( + IArchiveEntry IWritableArchive.AddEntry( string key, Stream source, bool closeStream, @@ -99,7 +99,7 @@ public abstract partial class AbstractWritableArchive DateTime? modified ) => AddEntry(key, source, closeStream, size, modified); - IArchiveEntry IWritableArchive.AddDirectoryEntry(string key, DateTime? modified) => + IArchiveEntry IWritableArchive.AddDirectoryEntry(string key, DateTime? modified) => AddDirectoryEntry(key, modified); public TEntry AddEntry( @@ -142,10 +142,10 @@ public abstract partial class AbstractWritableArchive return false; } - ValueTask IWritableAsyncArchive.RemoveEntryAsync(IArchiveEntry entry) => + ValueTask IWritableAsyncArchive.RemoveEntryAsync(IArchiveEntry entry) => RemoveEntryAsync((TEntry)entry); - async ValueTask IWritableAsyncArchive.AddEntryAsync( + async ValueTask IWritableAsyncArchive.AddEntryAsync( string key, Stream source, bool closeStream, @@ -154,7 +154,7 @@ public abstract partial class AbstractWritableArchive CancellationToken cancellationToken ) => await AddEntryAsync(key, source, closeStream, size, modified, cancellationToken); - async ValueTask IWritableAsyncArchive.AddDirectoryEntryAsync( + async ValueTask IWritableAsyncArchive.AddDirectoryEntryAsync( string key, DateTime? modified, CancellationToken cancellationToken diff --git a/src/SharpCompress/Archives/ArchiveFactory.cs b/src/SharpCompress/Archives/ArchiveFactory.cs index 91a4ad32..f994824b 100644 --- a/src/SharpCompress/Archives/ArchiveFactory.cs +++ b/src/SharpCompress/Archives/ArchiveFactory.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using SharpCompress.Common; +using SharpCompress.Common.Options; using SharpCompress.Factories; using SharpCompress.IO; using SharpCompress.Readers; @@ -19,18 +20,19 @@ public static partial class ArchiveFactory return FindFactory(stream).OpenArchive(stream, readerOptions); } - public static IWritableArchive CreateArchive(ArchiveType type) + public static IWritableArchive CreateArchive() + where TOptions : IWriterOptions { var factory = Factory - .Factories.OfType() - .FirstOrDefault(item => item.KnownArchiveType == type); + .Factories.OfType>() + .FirstOrDefault(); if (factory != null) { return factory.CreateArchive(); } - throw new NotSupportedException("Cannot create Archives of type: " + type); + throw new NotSupportedException("Cannot create Archives of type: " + typeof(TOptions)); } public static IArchive OpenArchive(string filePath, ReaderOptions? options = null) diff --git a/src/SharpCompress/Archives/GZip/GZipArchive.Async.cs b/src/SharpCompress/Archives/GZip/GZipArchive.Async.cs index 542db118..82b468d8 100644 --- a/src/SharpCompress/Archives/GZip/GZipArchive.Async.cs +++ b/src/SharpCompress/Archives/GZip/GZipArchive.Async.cs @@ -40,7 +40,7 @@ public partial class GZipArchive { throw new InvalidFormatException("Only one entry is allowed in a GZip Archive"); } - using var writer = new GZipWriter( + await using var writer = new GZipWriter( stream, options as GZipWriterOptions ?? new GZipWriterOptions(options) ); @@ -50,7 +50,7 @@ public partial class GZipArchive { if (!entry.IsDirectory) { - using var entryStream = entry.OpenEntryStream(); + using var entryStream = await entry.OpenEntryStreamAsync(cancellationToken); await writer .WriteAsync( entry.Key.NotNull("Entry Key is null"), @@ -62,7 +62,7 @@ public partial class GZipArchive } foreach (var entry in newEntries.Where(x => !x.IsDirectory)) { - using var entryStream = entry.OpenEntryStream(); + using var entryStream = await entry.OpenEntryStreamAsync(cancellationToken); await writer .WriteAsync(entry.Key.NotNull("Entry Key is null"), entryStream, cancellationToken) .ConfigureAwait(false); diff --git a/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs b/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs index 7b0892c8..ab6dc786 100644 --- a/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs +++ b/src/SharpCompress/Archives/GZip/GZipArchive.Factory.cs @@ -14,7 +14,10 @@ namespace SharpCompress.Archives.GZip; public partial class GZipArchive #if NET8_0_OR_GREATER : IWritableArchiveOpenable, - IMultiArchiveOpenable, IWritableAsyncArchive> + IMultiArchiveOpenable< + IWritableArchive, + IWritableAsyncArchive + > #endif { public static IWritableAsyncArchive OpenAsyncArchive( @@ -25,13 +28,14 @@ public partial class GZipArchive { cancellationToken.ThrowIfCancellationRequested(); path.NotNullOrEmpty(nameof(path)); - return (IWritableAsyncArchive)OpenArchive( - new FileInfo(path), - readerOptions ?? new ReaderOptions() - ); + return (IWritableAsyncArchive) + OpenArchive(new FileInfo(path), readerOptions ?? new ReaderOptions()); } - public static IWritableArchive OpenArchive(string filePath, ReaderOptions? readerOptions = null) + public static IWritableArchive OpenArchive( + string filePath, + ReaderOptions? readerOptions = null + ) { filePath.NotNullOrEmpty(nameof(filePath)); return OpenArchive(new FileInfo(filePath), readerOptions ?? new ReaderOptions()); @@ -84,7 +88,10 @@ public partial class GZipArchive ); } - public static IWritableArchive OpenArchive(Stream stream, ReaderOptions? readerOptions = null) + public static IWritableArchive OpenArchive( + Stream stream, + ReaderOptions? readerOptions = null + ) { stream.NotNull(nameof(stream)); @@ -140,7 +147,8 @@ public partial class GZipArchive public static IWritableArchive CreateArchive() => new GZipArchive(); - public static IWritableAsyncArchive CreateAsyncArchive() => new GZipArchive(); + public static IWritableAsyncArchive CreateAsyncArchive() => + new GZipArchive(); public static bool IsGZipFile(string filePath) => IsGZipFile(new FileInfo(filePath)); diff --git a/src/SharpCompress/Archives/GZip/GZipArchive.cs b/src/SharpCompress/Archives/GZip/GZipArchive.cs index 6cc9bb54..56f61fa5 100644 --- a/src/SharpCompress/Archives/GZip/GZipArchive.cs +++ b/src/SharpCompress/Archives/GZip/GZipArchive.cs @@ -13,7 +13,8 @@ using SharpCompress.Writers.GZip; namespace SharpCompress.Archives.GZip; -public partial class GZipArchive : AbstractWritableArchive +public partial class GZipArchive + : AbstractWritableArchive { private GZipArchive(SourceStream sourceStream) : base(ArchiveType.GZip, sourceStream) { } diff --git a/src/SharpCompress/Archives/IWritableArchive.cs b/src/SharpCompress/Archives/IWritableArchive.cs index f85453d3..0d17a937 100644 --- a/src/SharpCompress/Archives/IWritableArchive.cs +++ b/src/SharpCompress/Archives/IWritableArchive.cs @@ -16,8 +16,7 @@ public interface IWritableArchiveCommon IDisposable PauseEntryRebuilding(); } -public interface IWritableArchive : IArchive, IWritableArchiveCommon -where TOptions : IWriterOptions +public interface IWritableArchive : IArchive, IWritableArchiveCommon { IArchiveEntry AddEntry( string key, @@ -29,29 +28,23 @@ where TOptions : IWriterOptions IArchiveEntry AddDirectoryEntry(string key, DateTime? modified = null); - /// - /// Saves the archive to the specified stream using the given writer options. - /// - void SaveTo(Stream stream, TOptions options); - /// /// Removes the specified entry from the archive. /// void RemoveEntry(IArchiveEntry entry); } -public interface IWritableAsyncArchive : IAsyncArchive, IWritableArchiveCommon +public interface IWritableArchive : IWritableArchive where TOptions : IWriterOptions { /// - /// Asynchronously saves the archive to the specified stream using the given writer options. + /// Saves the archive to the specified stream using the given writer options. /// - ValueTask SaveToAsync( - Stream stream, - TOptions options, - CancellationToken cancellationToken = default - ); + void SaveTo(Stream stream, TOptions options); +} +public interface IWritableAsyncArchive : IAsyncArchive, IWritableArchiveCommon +{ /// /// Asynchronously adds an entry to the archive with the specified key, source stream, and options. /// @@ -78,3 +71,16 @@ public interface IWritableAsyncArchive : IAsyncArchive, IWritableArchi /// ValueTask RemoveEntryAsync(IArchiveEntry entry); } + +public interface IWritableAsyncArchive : IWritableAsyncArchive + where TOptions : IWriterOptions +{ + /// + /// Asynchronously saves the archive to the specified stream using the given writer options. + /// + ValueTask SaveToAsync( + Stream stream, + TOptions options, + CancellationToken cancellationToken = default + ); +} diff --git a/src/SharpCompress/Archives/IWritableArchiveExtensions.cs b/src/SharpCompress/Archives/IWritableArchiveExtensions.cs index 8757b393..6012dda5 100644 --- a/src/SharpCompress/Archives/IWritableArchiveExtensions.cs +++ b/src/SharpCompress/Archives/IWritableArchiveExtensions.cs @@ -58,17 +58,23 @@ public static class IWritableArchiveExtensions fileInfo.LastWriteTime ); } + } - public void SaveTo(string filePath, IWriterOptions? options = null) => - writableArchive.SaveTo( - new FileInfo(filePath), - options ?? new WriterOptions(CompressionType.Deflate) - ); + public static void SaveTo( + this IWritableArchive writableArchive, + string filePath, + TOptions options + ) + where TOptions : IWriterOptions => writableArchive.SaveTo(new FileInfo(filePath), options); - public void SaveTo(FileInfo fileInfo, IWriterOptions? options = null) - { - using var stream = fileInfo.Open(FileMode.Create, FileAccess.Write); - writableArchive.SaveTo(stream, options ?? new WriterOptions(CompressionType.Deflate)); - } + public static void SaveTo( + this IWritableArchive writableArchive, + FileInfo fileInfo, + TOptions options + ) + where TOptions : IWriterOptions + { + using var stream = fileInfo.Open(FileMode.Create, FileAccess.Write); + writableArchive.SaveTo(stream, options); } } diff --git a/src/SharpCompress/Archives/IWritableAsyncArchiveExtensions.cs b/src/SharpCompress/Archives/IWritableAsyncArchiveExtensions.cs index 1d065fe9..365cf852 100644 --- a/src/SharpCompress/Archives/IWritableAsyncArchiveExtensions.cs +++ b/src/SharpCompress/Archives/IWritableAsyncArchiveExtensions.cs @@ -60,32 +60,26 @@ public static class IWritableAsyncArchiveExtensions fileInfo.LastWriteTime ); } + } - public ValueTask SaveToAsync( - string filePath, - IWriterOptions? options = null, - CancellationToken cancellationToken = default - ) => - writableArchive.SaveToAsync( - new FileInfo(filePath), - options ?? new WriterOptions(CompressionType.Deflate), - cancellationToken - ); + public static ValueTask SaveToAsync( + this IWritableAsyncArchive writableArchive, + string filePath, + TOptions options, + CancellationToken cancellationToken = default + ) + where TOptions : IWriterOptions => + writableArchive.SaveToAsync(new FileInfo(filePath), options, cancellationToken); - public async ValueTask SaveToAsync( - FileInfo fileInfo, - IWriterOptions? options = null, - CancellationToken cancellationToken = default - ) - { - using var stream = fileInfo.Open(FileMode.Create, FileAccess.Write); - await writableArchive - .SaveToAsync( - stream, - options ?? new WriterOptions(CompressionType.Deflate), - cancellationToken - ) - .ConfigureAwait(false); - } + public static async ValueTask SaveToAsync( + this IWritableAsyncArchive writableArchive, + FileInfo fileInfo, + TOptions options, + CancellationToken cancellationToken = default + ) + where TOptions : IWriterOptions + { + using var stream = fileInfo.Open(FileMode.Create, FileAccess.Write); + await writableArchive.SaveToAsync(stream, options, cancellationToken).ConfigureAwait(false); } } diff --git a/src/SharpCompress/Archives/IWriteableArchiveFactory.cs b/src/SharpCompress/Archives/IWriteableArchiveFactory.cs index f1de642d..40a01fac 100644 --- a/src/SharpCompress/Archives/IWriteableArchiveFactory.cs +++ b/src/SharpCompress/Archives/IWriteableArchiveFactory.cs @@ -1,3 +1,5 @@ +using SharpCompress.Common.Options; + namespace SharpCompress.Archives; /// @@ -10,11 +12,12 @@ namespace SharpCompress.Archives; /// /// /// -public interface IWriteableArchiveFactory : Factories.IFactory +public interface IWriteableArchiveFactory : Factories.IFactory + where TOptions : IWriterOptions { /// /// Creates a new, empty archive, ready to be written. /// /// - IWritableArchive CreateArchive(); + IWritableArchive CreateArchive(); } diff --git a/src/SharpCompress/Archives/Tar/TarArchive.Async.cs b/src/SharpCompress/Archives/Tar/TarArchive.Async.cs index 937879c3..24a548a8 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.Async.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.Async.cs @@ -19,7 +19,7 @@ public partial class TarArchive { protected override async ValueTask SaveToAsync( Stream stream, - IWriterOptions options, + TarWriterOptions options, IAsyncEnumerable oldEntries, IEnumerable newEntries, CancellationToken cancellationToken = default diff --git a/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs b/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs index 959b4ab4..f3faac49 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.Factory.cs @@ -9,22 +9,29 @@ using SharpCompress.Common; using SharpCompress.Common.Tar.Headers; using SharpCompress.IO; using SharpCompress.Readers; +using SharpCompress.Writers.Tar; namespace SharpCompress.Archives.Tar; public partial class TarArchive #if NET8_0_OR_GREATER - : IWritableArchiveOpenable, - IMultiArchiveOpenable + : IWritableArchiveOpenable, + IMultiArchiveOpenable< + IWritableArchive, + IWritableAsyncArchive + > #endif { - public static IWritableArchive OpenArchive(string filePath, ReaderOptions? readerOptions = null) + public static IWritableArchive OpenArchive( + string filePath, + ReaderOptions? readerOptions = null + ) { filePath.NotNullOrEmpty(nameof(filePath)); return OpenArchive(new FileInfo(filePath), readerOptions); } - public static IWritableArchive OpenArchive( + public static IWritableArchive OpenArchive( FileInfo fileInfo, ReaderOptions? readerOptions = null ) @@ -39,7 +46,7 @@ public partial class TarArchive ); } - public static IWritableArchive OpenArchive( + public static IWritableArchive OpenArchive( IEnumerable fileInfos, ReaderOptions? readerOptions = null ) @@ -55,7 +62,7 @@ public partial class TarArchive ); } - public static IWritableArchive OpenArchive( + public static IWritableArchive OpenArchive( IEnumerable streams, ReaderOptions? readerOptions = null ) @@ -71,7 +78,10 @@ public partial class TarArchive ); } - public static IWritableArchive OpenArchive(Stream stream, ReaderOptions? readerOptions = null) + public static IWritableArchive OpenArchive( + Stream stream, + ReaderOptions? readerOptions = null + ) { stream.NotNull(nameof(stream)); @@ -85,54 +95,55 @@ public partial class TarArchive ); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( Stream stream, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(stream, readerOptions); + return (IWritableAsyncArchive)OpenArchive(stream, readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( string path, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(new FileInfo(path), readerOptions); + return (IWritableAsyncArchive) + OpenArchive(new FileInfo(path), readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( FileInfo fileInfo, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(fileInfo, readerOptions); + return (IWritableAsyncArchive)OpenArchive(fileInfo, readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( IReadOnlyList streams, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(streams, readerOptions); + return (IWritableAsyncArchive)OpenArchive(streams, readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( IReadOnlyList fileInfos, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(fileInfos, readerOptions); + return (IWritableAsyncArchive)OpenArchive(fileInfos, readerOptions); } public static bool IsTarFile(string filePath) => IsTarFile(new FileInfo(filePath)); @@ -196,7 +207,7 @@ public partial class TarArchive } } - public static IWritableArchive CreateArchive() => new TarArchive(); + public static IWritableArchive CreateArchive() => new TarArchive(); - public static IWritableAsyncArchive CreateAsyncArchive() => new TarArchive(); + public static IWritableAsyncArchive CreateAsyncArchive() => new TarArchive(); } diff --git a/src/SharpCompress/Archives/Tar/TarArchive.cs b/src/SharpCompress/Archives/Tar/TarArchive.cs index e62e9e83..70dc93d2 100644 --- a/src/SharpCompress/Archives/Tar/TarArchive.cs +++ b/src/SharpCompress/Archives/Tar/TarArchive.cs @@ -16,7 +16,8 @@ using SharpCompress.Writers.Tar; namespace SharpCompress.Archives.Tar; -public partial class TarArchive : AbstractWritableArchive +public partial class TarArchive + : AbstractWritableArchive { protected override IEnumerable LoadVolumes(SourceStream sourceStream) { @@ -118,7 +119,7 @@ public partial class TarArchive : AbstractWritableArchive oldEntries, IEnumerable newEntries ) diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.Async.cs b/src/SharpCompress/Archives/Zip/ZipArchive.Async.cs index 12c9fe6d..431a4afd 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.Async.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.Async.cs @@ -73,7 +73,7 @@ public partial class ZipArchive protected override async ValueTask SaveToAsync( Stream stream, - IWriterOptions options, + ZipWriterOptions options, IAsyncEnumerable oldEntries, IEnumerable newEntries, CancellationToken cancellationToken = default diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs b/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs index 4904decb..56f383cc 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.Factory.cs @@ -9,22 +9,29 @@ using SharpCompress.Common.Zip; using SharpCompress.Common.Zip.Headers; using SharpCompress.IO; using SharpCompress.Readers; +using SharpCompress.Writers.Zip; namespace SharpCompress.Archives.Zip; public partial class ZipArchive #if NET8_0_OR_GREATER - : IWritableArchiveOpenable, - IMultiArchiveOpenable + : IWritableArchiveOpenable, + IMultiArchiveOpenable< + IWritableArchive, + IWritableAsyncArchive + > #endif { - public static IWritableArchive OpenArchive(string filePath, ReaderOptions? readerOptions = null) + public static IWritableArchive OpenArchive( + string filePath, + ReaderOptions? readerOptions = null + ) { filePath.NotNullOrEmpty(nameof(filePath)); return OpenArchive(new FileInfo(filePath), readerOptions); } - public static IWritableArchive OpenArchive( + public static IWritableArchive OpenArchive( FileInfo fileInfo, ReaderOptions? readerOptions = null ) @@ -39,7 +46,7 @@ public partial class ZipArchive ); } - public static IWritableArchive OpenArchive( + public static IWritableArchive OpenArchive( IEnumerable fileInfos, ReaderOptions? readerOptions = null ) @@ -55,7 +62,7 @@ public partial class ZipArchive ); } - public static IWritableArchive OpenArchive( + public static IWritableArchive OpenArchive( IEnumerable streams, ReaderOptions? readerOptions = null ) @@ -71,7 +78,10 @@ public partial class ZipArchive ); } - public static IWritableArchive OpenArchive(Stream stream, ReaderOptions? readerOptions = null) + public static IWritableArchive OpenArchive( + Stream stream, + ReaderOptions? readerOptions = null + ) { stream.NotNull(nameof(stream)); @@ -85,54 +95,54 @@ public partial class ZipArchive ); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( string path, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(path, readerOptions); + return (IWritableAsyncArchive)OpenArchive(path, readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( Stream stream, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(stream, readerOptions); + return (IWritableAsyncArchive)OpenArchive(stream, readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( FileInfo fileInfo, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(fileInfo, readerOptions); + return (IWritableAsyncArchive)OpenArchive(fileInfo, readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( IReadOnlyList streams, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(streams, readerOptions); + return (IWritableAsyncArchive)OpenArchive(streams, readerOptions); } - public static IWritableAsyncArchive OpenAsyncArchive( + public static IWritableAsyncArchive OpenAsyncArchive( IReadOnlyList fileInfos, ReaderOptions? readerOptions = null, CancellationToken cancellationToken = default ) { cancellationToken.ThrowIfCancellationRequested(); - return (IWritableAsyncArchive)OpenArchive(fileInfos, readerOptions); + return (IWritableAsyncArchive)OpenArchive(fileInfos, readerOptions); } public static bool IsZipFile(string filePath, string? password = null) => @@ -235,9 +245,9 @@ public partial class ZipArchive } } - public static IWritableArchive CreateArchive() => new ZipArchive(); + public static IWritableArchive CreateArchive() => new ZipArchive(); - public static IWritableAsyncArchive CreateAsyncArchive() => new ZipArchive(); + public static IWritableAsyncArchive CreateAsyncArchive() => new ZipArchive(); public static async ValueTask IsZipMultiAsync( Stream stream, diff --git a/src/SharpCompress/Archives/Zip/ZipArchive.cs b/src/SharpCompress/Archives/Zip/ZipArchive.cs index dd28e5b6..8fc423bd 100644 --- a/src/SharpCompress/Archives/Zip/ZipArchive.cs +++ b/src/SharpCompress/Archives/Zip/ZipArchive.cs @@ -17,7 +17,8 @@ using SharpCompress.Writers.Zip; namespace SharpCompress.Archives.Zip; -public partial class ZipArchive : AbstractWritableArchive +public partial class ZipArchive + : AbstractWritableArchive { private readonly SeekableZipHeaderFactory? headerFactory; @@ -111,11 +112,12 @@ public partial class ZipArchive : AbstractWritableArchive SaveTo(stream, new WriterOptions(CompressionType.Deflate)); + public void SaveTo(Stream stream) => + SaveTo(stream, new ZipWriterOptions(CompressionType.Deflate)); protected override void SaveTo( Stream stream, - IWriterOptions options, + ZipWriterOptions options, IEnumerable oldEntries, IEnumerable newEntries ) diff --git a/src/SharpCompress/Factories/GZipFactory.cs b/src/SharpCompress/Factories/GZipFactory.cs index f68673b0..68aa8e78 100644 --- a/src/SharpCompress/Factories/GZipFactory.cs +++ b/src/SharpCompress/Factories/GZipFactory.cs @@ -27,7 +27,7 @@ public class GZipFactory IMultiArchiveFactory, IReaderFactory, IWriterFactory, - IWriteableArchiveFactory + IWriteableArchiveFactory { #region IFactory @@ -193,7 +193,7 @@ public class GZipFactory #region IWriteableArchiveFactory /// - public IWritableArchive CreateArchive() => GZipArchive.CreateArchive(); + public IWritableArchive CreateArchive() => GZipArchive.CreateArchive(); #endregion } diff --git a/src/SharpCompress/Factories/TarFactory.cs b/src/SharpCompress/Factories/TarFactory.cs index 3ef9f840..f399b984 100644 --- a/src/SharpCompress/Factories/TarFactory.cs +++ b/src/SharpCompress/Factories/TarFactory.cs @@ -25,7 +25,7 @@ public class TarFactory IMultiArchiveFactory, IReaderFactory, IWriterFactory, - IWriteableArchiveFactory + IWriteableArchiveFactory { #region IFactory @@ -247,7 +247,7 @@ public class TarFactory #region IWriteableArchiveFactory /// - public IWritableArchive CreateArchive() => TarArchive.CreateArchive(); + public IWritableArchive CreateArchive() => TarArchive.CreateArchive(); #endregion } diff --git a/src/SharpCompress/Factories/ZipFactory.cs b/src/SharpCompress/Factories/ZipFactory.cs index b793d010..f22cdf2e 100644 --- a/src/SharpCompress/Factories/ZipFactory.cs +++ b/src/SharpCompress/Factories/ZipFactory.cs @@ -24,7 +24,7 @@ public class ZipFactory IMultiArchiveFactory, IReaderFactory, IWriterFactory, - IWriteableArchiveFactory + IWriteableArchiveFactory { #region IFactory @@ -217,7 +217,7 @@ public class ZipFactory #region IWriteableArchiveFactory /// - public IWritableArchive CreateArchive() => ZipArchive.CreateArchive(); + public IWritableArchive CreateArchive() => ZipArchive.CreateArchive(); #endregion }