From 220ba67faafd0ec3d4ab7d3ba5c1ad49a5860b09 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Thu, 18 Dec 2025 15:26:35 +0000 Subject: [PATCH] add extract all test --- src/SharpCompress/Archives/ArchiveFactory.cs | 2 +- .../Archives/IArchiveExtensions.cs | 13 +---- tests/SharpCompress.Test/ExtractAll.cs | 48 +++++++++++++++++++ 3 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 tests/SharpCompress.Test/ExtractAll.cs diff --git a/src/SharpCompress/Archives/ArchiveFactory.cs b/src/SharpCompress/Archives/ArchiveFactory.cs index 94368ece..0b4d128a 100644 --- a/src/SharpCompress/Archives/ArchiveFactory.cs +++ b/src/SharpCompress/Archives/ArchiveFactory.cs @@ -123,7 +123,7 @@ public static class ArchiveFactory ) { using var archive = Open(sourceArchive); - archive.WriteToDirectory(destinationDirectory, options); + archive.ExtractToDirectory(destinationDirectory, options); } private static T FindFactory(FileInfo finfo) diff --git a/src/SharpCompress/Archives/IArchiveExtensions.cs b/src/SharpCompress/Archives/IArchiveExtensions.cs index d9701da3..3fcf79df 100644 --- a/src/SharpCompress/Archives/IArchiveExtensions.cs +++ b/src/SharpCompress/Archives/IArchiveExtensions.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; using System.Threading; using SharpCompress.Common; using SharpCompress.Readers; @@ -22,17 +21,10 @@ public static class IArchiveExtensions using var reader = archive.ExtractAllEntries(); reader.WriteAllToDirectory(destinationDirectory, options); } - - /// - /// Extracts the archive to the destination directory. Directories will be created as needed. - /// - /// The archive to extract. - /// The folder to extract into. - /// Optional progress report callback. - /// Optional cancellation token. public static void ExtractToDirectory( this IArchive archive, string destination, + ExtractionOptions? options = null, Action? progressReport = null, CancellationToken cancellationToken = default ) @@ -74,8 +66,7 @@ public static class IArchiveExtensions } // Write file - using var fs = File.OpenWrite(path); - entry.WriteTo(fs); + entry.WriteToFile(path, options); // Update progress bytesRead += entry.Size; diff --git a/tests/SharpCompress.Test/ExtractAll.cs b/tests/SharpCompress.Test/ExtractAll.cs new file mode 100644 index 00000000..73e9661d --- /dev/null +++ b/tests/SharpCompress.Test/ExtractAll.cs @@ -0,0 +1,48 @@ +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using SharpCompress.Archives; +using SharpCompress.Common; +using SharpCompress.Readers; +using Xunit; + +namespace SharpCompress.Test; + +public class ExtractAll : TestBase +{ + [Theory] + [InlineData("Zip.deflate.zip")] + [InlineData("Rar5.rar")] + [InlineData("Rar.rar")] + [InlineData("Rar.solid.rar")] + [InlineData( "7Zip.solid.7z")] + [InlineData( "7Zip.nonsolid.7z")] + [InlineData( "7Zip.LZMA.7z")] + public async Task ExtractAllEntries(string archivePath) + { + + var testArchive = Path.Combine(TEST_ARCHIVES_PATH, archivePath); + var options = new ExtractionOptions() { + ExtractFullPath = true, + Overwrite = true + }; + + using var archive = ArchiveFactory.Open( testArchive ); + + if (archive.IsSolid && archive.Type != ArchiveType.SevenZip) + { + var reader = archive.ExtractAllEntries(); + while (await reader.MoveToNextEntryAsync()) + { + if (!reader.Entry.IsDirectory) + { + await reader.WriteEntryToDirectoryAsync(SCRATCH_FILES_PATH, options); + } + } + } + else + { + archive.ExtractToDirectory(SCRATCH_FILES_PATH, options); + } + } +}