From cd70a7760eda7ecf06293efd217c6dfc585f8dec Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Fri, 16 Jan 2026 11:44:12 +0000 Subject: [PATCH] remvoe AutoFactory --- src/SharpCompress/Archives/ArchiveFactory.cs | 14 ++++-- .../Archives/AutoArchiveFactory.cs | 45 ------------------- tests/SharpCompress.Test/ArchiveTests.cs | 20 +++++---- .../SevenZip/SevenZipArchiveTests.cs | 2 +- .../Zip/ZipArchiveAsyncTests.cs | 14 +++--- 5 files changed, 28 insertions(+), 67 deletions(-) delete mode 100644 src/SharpCompress/Archives/AutoArchiveFactory.cs diff --git a/src/SharpCompress/Archives/ArchiveFactory.cs b/src/SharpCompress/Archives/ArchiveFactory.cs index d1597586..f59493c9 100644 --- a/src/SharpCompress/Archives/ArchiveFactory.cs +++ b/src/SharpCompress/Archives/ArchiveFactory.cs @@ -189,7 +189,15 @@ public static class ArchiveFactory archive.WriteToDirectory(destinationDirectory, options); } - private static T FindFactory(FileInfo finfo) + public static T FindFactory(string path) + where T : IFactory + { + path.NotNullOrEmpty(nameof(path)); + using Stream stream = File.OpenRead(path); + return FindFactory(stream); + } + + public static T FindFactory(FileInfo finfo) where T : IFactory { finfo.NotNull(nameof(finfo)); @@ -197,7 +205,7 @@ public static class ArchiveFactory return FindFactory(stream); } - private static T FindFactory(Stream stream) + public static T FindFactory(Stream stream) where T : IFactory { stream.NotNull(nameof(stream)); @@ -345,6 +353,4 @@ public static class ArchiveFactory } } } - - public static IArchiveFactory AutoFactory { get; } = new AutoArchiveFactory(); } diff --git a/src/SharpCompress/Archives/AutoArchiveFactory.cs b/src/SharpCompress/Archives/AutoArchiveFactory.cs deleted file mode 100644 index afb29de2..00000000 --- a/src/SharpCompress/Archives/AutoArchiveFactory.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using SharpCompress.Common; -using SharpCompress.Readers; - -namespace SharpCompress.Archives; - -internal class AutoArchiveFactory : IArchiveFactory -{ - public string Name => nameof(AutoArchiveFactory); - - public ArchiveType? KnownArchiveType => null; - - public IEnumerable GetSupportedExtensions() => throw new NotSupportedException(); - - public bool IsArchive( - Stream stream, - string? password = null, - int bufferSize = ReaderOptions.DefaultBufferSize - ) => throw new NotSupportedException(); - - public ValueTask IsArchiveAsync( - Stream stream, - string? password = null, - int bufferSize = ReaderOptions.DefaultBufferSize, - CancellationToken cancellationToken = default - ) => throw new NotSupportedException(); - - public FileInfo? GetFilePart(int index, FileInfo part1) => throw new NotSupportedException(); - - public IArchive OpenArchive(Stream stream, ReaderOptions? readerOptions = null) => - ArchiveFactory.OpenArchive(stream, readerOptions); - - public IAsyncArchive OpenAsyncArchive(Stream stream, ReaderOptions? readerOptions = null) => - (IAsyncArchive)OpenArchive(stream, readerOptions); - - public IArchive OpenArchive(FileInfo fileInfo, ReaderOptions? readerOptions = null) => - ArchiveFactory.OpenArchive(fileInfo, readerOptions); - - public IAsyncArchive OpenAsyncArchive(FileInfo fileInfo, ReaderOptions? readerOptions = null) => - (IAsyncArchive)OpenArchive(fileInfo, readerOptions); -} diff --git a/tests/SharpCompress.Test/ArchiveTests.cs b/tests/SharpCompress.Test/ArchiveTests.cs index b6c5adf8..f0f0c0e7 100644 --- a/tests/SharpCompress.Test/ArchiveTests.cs +++ b/tests/SharpCompress.Test/ArchiveTests.cs @@ -85,8 +85,11 @@ public class ArchiveTests : ReaderTests } } - protected void ArchiveStreamRead(string testArchive, ReaderOptions? readerOptions = null) => - ArchiveStreamRead(ArchiveFactory.AutoFactory, testArchive, readerOptions); + protected void ArchiveStreamRead(string testArchive, ReaderOptions? readerOptions = null) + { + testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); + ArchiveStreamRead(ArchiveFactory.FindFactory(testArchive),readerOptions, testArchive); + } protected void ArchiveStreamRead( IArchiveFactory archiveFactory, @@ -101,7 +104,7 @@ public class ArchiveTests : ReaderTests protected void ArchiveStreamRead( ReaderOptions? readerOptions = null, params string[] testArchives - ) => ArchiveStreamRead(ArchiveFactory.AutoFactory, readerOptions, testArchives); + ) => ArchiveStreamRead(ArchiveFactory.FindFactory(testArchives[0]), readerOptions, testArchives); protected void ArchiveStreamRead( IArchiveFactory archiveFactory, @@ -271,12 +274,14 @@ public class ArchiveTests : ReaderTests } protected void ArchiveFileRead( - IArchiveFactory archiveFactory, string testArchive, - ReaderOptions? readerOptions = null + ReaderOptions? readerOptions = null, + IArchiveFactory ? archiveFactory = null + ) { testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); + archiveFactory ??= ArchiveFactory.FindFactory(testArchive); using (var archive = archiveFactory.OpenArchive(new FileInfo(testArchive), readerOptions)) { foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory)) @@ -290,9 +295,6 @@ public class ArchiveTests : ReaderTests VerifyFiles(); } - protected void ArchiveFileRead(string testArchive, ReaderOptions? readerOptions = null) => - ArchiveFileRead(ArchiveFactory.AutoFactory, testArchive, readerOptions); - protected void ArchiveFileSkip( string testArchive, string fileOrder, @@ -600,7 +602,7 @@ public class ArchiveTests : ReaderTests { testArchive = Path.Combine(TEST_ARCHIVES_PATH, testArchive); await ArchiveStreamReadAsync( - ArchiveFactory.AutoFactory, + ArchiveFactory.FindFactory(testArchive), readerOptions, new[] { testArchive } ); diff --git a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs index 6cbdc87e..fa42e851 100644 --- a/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs +++ b/tests/SharpCompress.Test/SevenZip/SevenZipArchiveTests.cs @@ -61,7 +61,7 @@ public class SevenZipArchiveTests : ArchiveTests [Fact] public void SevenZipArchive_LZMA2_EXE_PathRead() => - ArchiveFileRead(new SevenZipFactory(), "7Zip.LZMA2.exe", new() { LookForHeader = true }); + ArchiveFileRead("7Zip.LZMA2.exe", new() { LookForHeader = true }, new SevenZipFactory()); [Fact] public void SevenZipArchive_LZMA2AES_StreamRead() => diff --git a/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs b/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs index 1d114f78..58adf535 100644 --- a/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs +++ b/tests/SharpCompress.Test/Zip/ZipArchiveAsyncTests.cs @@ -231,21 +231,19 @@ public class ZipArchiveAsyncTests : ArchiveTests var progressReports = new System.Collections.Generic.List(); var progress = new Progress(report => progressReports.Add(report)); + #if NETFRAMEWORK using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.zip"))) + #else + await using (Stream stream = File.OpenRead(Path.Combine(TEST_ARCHIVES_PATH, "Zip.deflate.zip"))) + #endif { - IAsyncArchive archive = ZipArchive.OpenAsyncArchive(new AsyncOnlyStream(stream)); - try - { + await using IAsyncArchive archive = ZipArchive.OpenAsyncArchive(new AsyncOnlyStream(stream)); await archive.WriteToDirectoryAsync( SCRATCH_FILES_PATH, new ExtractionOptions { ExtractFullPath = true, Overwrite = true }, progress ); - } - finally - { - await archive.DisposeAsync(); - } + } VerifyFiles();