diff --git a/docs/API.md b/docs/API.md index 209378fd..eb8f007a 100644 --- a/docs/API.md +++ b/docs/API.md @@ -8,17 +8,17 @@ Quick reference for commonly used SharpCompress APIs. ```csharp // Auto-detect format -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { // Works with Zip, Tar, GZip, Rar, 7Zip, etc. } // Specific format - Archive API -using (var archive = ZipArchive.Open("file.zip")) -using (var archive = TarArchive.Open("file.tar")) -using (var archive = RarArchive.Open("file.rar")) -using (var archive = SevenZipArchive.Open("file.7z")) -using (var archive = GZipArchive.Open("file.gz")) +using (var archive = ZipArchive.OpenArchive("file.zip")) +using (var archive = TarArchive.OpenArchive("file.tar")) +using (var archive = RarArchive.OpenArchive("file.rar")) +using (var archive = SevenZipArchive.OpenArchive("file.7z")) +using (var archive = GZipArchive.OpenArchive("file.gz")) // With options var options = new ReaderOptions @@ -27,14 +27,14 @@ var options = new ReaderOptions LeaveStreamOpen = true, ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } }; -using (var archive = ZipArchive.Open("encrypted.zip", options)) +using (var archive = ZipArchive.OpenArchive("encrypted.zip", options)) ``` ### Creating Archives ```csharp // Writer Factory -using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType.Deflate)) +using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Zip, CompressionType.Deflate)) { // Write entries } @@ -63,7 +63,7 @@ using (var archive = ZipArchive.CreateArchive()) ### Reading/Extracting ```csharp -using (var archive = ZipArchive.Open("file.zip")) +using (var archive = ZipArchive.OpenArchive("file.zip")) { // Get all entries IEnumerable entries = archive.Entries; @@ -151,7 +151,7 @@ using (var archive = ZipArchive.CreateArchive()) ```csharp using (var stream = File.OpenRead("file.zip")) -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { while (reader.MoveToNextEntry()) { @@ -201,7 +201,7 @@ using (var reader = await ReaderFactory.OpenAsyncReader(stream)) ```csharp using (var stream = File.Create("output.zip")) -using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType.Deflate)) +using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Zip, CompressionType.Deflate)) { // Write single file using (var fileStream = File.OpenRead("source.txt")) @@ -239,7 +239,7 @@ var options = new ReaderOptions Default = Encoding.GetEncoding(932) } }; -using (var archive = ZipArchive.Open("file.zip", options)) +using (var archive = ZipArchive.OpenArchive("file.zip", options)) { // ... } @@ -290,8 +290,8 @@ ArchiveType.Ace // For Tar archives with compression // Use WriterFactory to create compressed tar archives -using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, CompressionType.GZip)) // Tar.GZip -using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, CompressionType.BZip2)) // Tar.BZip2 +using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Tar, CompressionType.GZip)) // Tar.GZip +using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Tar, CompressionType.BZip2)) // Tar.BZip2 ``` ### Archive Types @@ -349,7 +349,7 @@ var progress = new Progress(report => }); var options = new ReaderOptions { Progress = progress }; -using (var archive = ZipArchive.Open("archive.zip", options)) +using (var archive = ZipArchive.OpenArchive("archive.zip", options)) { archive.WriteToDirectory(@"C:\output"); } @@ -425,7 +425,7 @@ using (var archive = ZipArchive.CreateArchive()) ### Extract Specific Files ```csharp -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { var filesToExtract = new[] { "file1.txt", "file2.txt" }; @@ -439,7 +439,7 @@ using (var archive = ZipArchive.Open("archive.zip")) ### List Archive Contents ```csharp -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { foreach (var entry in archive.Entries) { @@ -459,7 +459,7 @@ using (var archive = ZipArchive.Open("archive.zip")) ```csharp var stream = File.OpenRead("archive.zip"); -var archive = ZipArchive.Open(stream); +var archive = ZipArchive.OpenArchive(stream); archive.WriteToDirectory(@"C:\output"); // stream not disposed - leaked resource ``` @@ -468,7 +468,7 @@ archive.WriteToDirectory(@"C:\output"); ```csharp using (var stream = File.OpenRead("archive.zip")) -using (var archive = ZipArchive.Open(stream)) +using (var archive = ZipArchive.OpenArchive(stream)) { archive.WriteToDirectory(@"C:\output"); } @@ -479,7 +479,7 @@ using (var archive = ZipArchive.Open(stream)) ```csharp // Loading entire archive then iterating -using (var archive = ZipArchive.Open("large.zip")) +using (var archive = ZipArchive.OpenArchive("large.zip")) { var entries = archive.Entries.ToList(); // Loads all in memory foreach (var e in entries) @@ -494,7 +494,7 @@ using (var archive = ZipArchive.Open("large.zip")) ```csharp // Streaming iteration using (var stream = File.OpenRead("large.zip")) -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { while (reader.MoveToNextEntry()) { diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 0ba6f581..2a3bb985 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -76,7 +76,7 @@ Factory classes for auto-detecting archive format and creating appropriate reade - Format-specific: `ZipFactory.cs`, `TarFactory.cs`, `RarFactory.cs`, etc. **How It Works:** -1. `ReaderFactory.Open(stream)` probes stream signatures +1. `ReaderFactory.OpenReader(stream)` probes stream signatures 2. Identifies format by magic bytes 3. Creates appropriate reader instance 4. Returns generic `IReader` interface @@ -142,7 +142,7 @@ Stream wrappers and utilities. **Example:** ```csharp // User calls factory -using (var reader = ReaderFactory.Open(stream)) // Returns IReader +using (var reader = ReaderFactory.OpenReader(stream)) // Returns IReader { while (reader.MoveToNextEntry()) { @@ -175,7 +175,7 @@ CompressionType.LZMA // LZMA CompressionType.PPMd // PPMd // Writer uses strategy pattern -var archive = ZipArchive.Create(); +var archive = ZipArchive.CreateArchive(); archive.SaveTo("output.zip", CompressionType.Deflate); // Use Deflate archive.SaveTo("output.bz2", CompressionType.BZip2); // Use BZip2 ``` @@ -248,7 +248,7 @@ foreach (var entry in entries) } // Reader API - provides iterator -IReader reader = ReaderFactory.Open(stream); +IReader reader = ReaderFactory.OpenReader(stream); while (reader.MoveToNextEntry()) { // Forward-only iteration - one entry at a time @@ -381,7 +381,7 @@ public class NewFormatArchive : AbstractArchive private NewFormatHeader _header; private List _entries; - public static NewFormatArchive Open(Stream stream) + public static NewFormatArchive OpenArchive(Stream stream) { var archive = new NewFormatArchive(); archive._header = NewFormatHeader.Read(stream); @@ -442,8 +442,8 @@ public class NewFormatFactory : Factory, IArchiveFactory, IReaderFactory public static NewFormatFactory Instance { get; } = new(); - public IArchive CreateArchive(Stream stream) - => NewFormatArchive.Open(stream); + public IArchive CreateArchive(Stream stream) + => NewFormatArchive.OpenArchive(stream); public IReader CreateReader(Stream stream, ReaderOptions options) => new NewFormatReader(stream) { Options = options }; @@ -481,7 +481,7 @@ public class NewFormatTests : TestBase public void NewFormat_Extracts_Successfully() { var archivePath = Path.Combine(TEST_ARCHIVES_PATH, "archive.newformat"); - using (var archive = NewFormatArchive.Open(archivePath)) + using (var archive = NewFormatArchive.OpenArchive(archivePath)) { archive.WriteToDirectory(SCRATCH_FILES_PATH); // Assert extraction @@ -561,7 +561,7 @@ public class CustomStream : Stream ```csharp // Correct: Nested using blocks using (var fileStream = File.OpenRead("archive.zip")) -using (var archive = ZipArchive.Open(fileStream)) +using (var archive = ZipArchive.OpenArchive(fileStream)) { archive.WriteToDirectory(@"C:\output"); } @@ -570,7 +570,7 @@ using (var archive = ZipArchive.Open(fileStream)) // Correct: Using with options var options = new ReaderOptions { LeaveStreamOpen = true }; var stream = File.OpenRead("archive.zip"); -using (var archive = ZipArchive.Open(stream, options)) +using (var archive = ZipArchive.OpenArchive(stream, options)) { archive.WriteToDirectory(@"C:\output"); } @@ -641,7 +641,7 @@ public void Archive_Extraction_Works() var testArchive = Path.Combine(TEST_ARCHIVES_PATH, "test.zip"); // Act - using (var archive = ZipArchive.Open(testArchive)) + using (var archive = ZipArchive.OpenArchive(testArchive)) { archive.WriteToDirectory(SCRATCH_FILES_PATH); } diff --git a/docs/ENCODING.md b/docs/ENCODING.md index 1737ace9..8200e756 100644 --- a/docs/ENCODING.md +++ b/docs/ENCODING.md @@ -27,7 +27,7 @@ var options = new ReaderOptions } }; -using (var archive = ZipArchive.Open("japanese.zip", options)) +using (var archive = ZipArchive.OpenArchive("japanese.zip", options)) { foreach (var entry in archive.Entries) { @@ -51,7 +51,7 @@ var options = new ReaderOptions { ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } }; -using (var archive = ZipArchive.Open("file.zip", options)) +using (var archive = ZipArchive.OpenArchive("file.zip", options)) { // Use archive with correct encoding } @@ -64,7 +64,7 @@ var options = new ReaderOptions ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } }; using (var stream = File.OpenRead("file.zip")) -using (var reader = ReaderFactory.Open(stream, options)) +using (var reader = ReaderFactory.OpenReader(stream, options)) { while (reader.MoveToNextEntry()) { @@ -89,7 +89,7 @@ var options = new ReaderOptions Default = Encoding.GetEncoding(932) } }; -using (var archive = ZipArchive.Open("japanese.zip", options)) +using (var archive = ZipArchive.OpenArchive("japanese.zip", options)) { // Correctly decodes Japanese filenames } @@ -266,7 +266,7 @@ SharpCompress attempts to auto-detect encoding, but this isn't always reliable: ```csharp // Auto-detection (default) -using (var archive = ZipArchive.Open("file.zip")) // Uses UTF8 by default +using (var archive = ZipArchive.OpenArchive("file.zip")) // Uses UTF8 by default { // May show corrupted characters if archive uses different encoding } @@ -276,7 +276,7 @@ var options = new ReaderOptions { ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } }; -using (var archive = ZipArchive.Open("file.zip", options)) +using (var archive = ZipArchive.OpenArchive("file.zip", options)) { // Correct characters displayed } @@ -324,7 +324,7 @@ var options = new ReaderOptions } }; -using (var archive = ZipArchive.Open("mixed.zip", options)) +using (var archive = ZipArchive.OpenArchive("mixed.zip", options)) { foreach (var entry in archive.Entries) { @@ -388,7 +388,7 @@ var options = new ReaderOptions } }; -using (var archive = ZipArchive.Open("japanese_files.zip", options)) +using (var archive = ZipArchive.OpenArchive("japanese_files.zip", options)) { archive.WriteToDirectory(@"C:\output", new ExtractionOptions { @@ -410,7 +410,7 @@ var options = new ReaderOptions } }; -using (var archive = ZipArchive.Open("french_files.zip", options)) +using (var archive = ZipArchive.OpenArchive("french_files.zip", options)) { archive.WriteToDirectory(@"C:\output"); } @@ -428,7 +428,7 @@ var options = new ReaderOptions } }; -using (var archive = ZipArchive.Open("chinese_files.zip", options)) +using (var archive = ZipArchive.OpenArchive("chinese_files.zip", options)) { archive.WriteToDirectory(@"C:\output"); } @@ -445,7 +445,7 @@ var options = new ReaderOptions } }; -using (var archive = ZipArchive.Open("russian_files.zip", options)) +using (var archive = ZipArchive.OpenArchive("russian_files.zip", options)) { archive.WriteToDirectory(@"C:\output"); } @@ -463,7 +463,7 @@ var options = new ReaderOptions }; using (var stream = File.OpenRead("japanese.zip")) -using (var reader = ReaderFactory.Open(stream, options)) +using (var reader = ReaderFactory.OpenReader(stream, options)) { while (reader.MoveToNextEntry()) { @@ -484,7 +484,7 @@ When creating archives, SharpCompress uses UTF8 by default (recommended): ```csharp // Create with UTF8 (default, recommended) -using (var archive = ZipArchive.Create()) +using (var archive = ZipArchive.CreateArchive()) { archive.AddAllFromDirectory(@"D:\my_files"); archive.SaveTo("output.zip", CompressionType.Deflate); diff --git a/docs/PERFORMANCE.md b/docs/PERFORMANCE.md index 03c12553..51b2f920 100644 --- a/docs/PERFORMANCE.md +++ b/docs/PERFORMANCE.md @@ -24,7 +24,7 @@ Choose the right API based on your use case: // - You need random access to entries // - Stream is seekable (file, MemoryStream) -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { // Random access - all entries available var specific = archive.Entries.FirstOrDefault(e => e.Key == "file.txt"); @@ -51,7 +51,7 @@ using (var archive = ZipArchive.Open("archive.zip")) // - Forward-only processing is acceptable using (var stream = File.OpenRead("large.zip")) -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { while (reader.MoveToNextEntry()) { @@ -129,7 +129,7 @@ For processing archives from downloads or pipes: ```csharp // Download stream (non-seekable) using (var httpStream = await httpClient.GetStreamAsync(url)) -using (var reader = ReaderFactory.Open(httpStream)) +using (var reader = ReaderFactory.OpenReader(httpStream)) { // Process entries as they arrive while (reader.MoveToNextEntry()) @@ -159,14 +159,14 @@ Choose based on your constraints: ```csharp // Download then extract (requires disk space) var archivePath = await DownloadFile(url, @"C:\temp\archive.zip"); -using (var archive = ZipArchive.Open(archivePath)) +using (var archive = ZipArchive.OpenArchive(archivePath)) { archive.WriteToDirectory(@"C:\output"); } // Stream during download (on-the-fly extraction) using (var httpStream = await httpClient.GetStreamAsync(url)) -using (var reader = ReaderFactory.Open(httpStream)) +using (var reader = ReaderFactory.OpenReader(httpStream)) { while (reader.MoveToNextEntry()) { @@ -198,7 +198,7 @@ Extracting File3 requires decompressing File1 and File2 first. **Random Extraction (Slow):** ```csharp -using (var archive = RarArchive.Open("solid.rar")) +using (var archive = RarArchive.OpenArchive("solid.rar")) { foreach (var entry in archive.Entries) { @@ -210,7 +210,7 @@ using (var archive = RarArchive.Open("solid.rar")) **Sequential Extraction (Fast):** ```csharp -using (var archive = RarArchive.Open("solid.rar")) +using (var archive = RarArchive.OpenArchive("solid.rar")) { // Method 1: Use WriteToDirectory (recommended) archive.WriteToDirectory(@"C:\output", new ExtractionOptions @@ -256,7 +256,7 @@ using (var archive = RarArchive.Open("solid.rar")) // Level 9 = Slowest, best compression // Write with different compression levels -using (var archive = ZipArchive.Create()) +using (var archive = ZipArchive.CreateArchive()) { archive.AddAllFromDirectory(@"D:\data"); @@ -293,7 +293,7 @@ using (var archive = ZipArchive.Create()) // Smaller block size = lower memory, faster // Larger block size = better compression, slower -using (var archive = TarArchive.Create()) +using (var archive = TarArchive.CreateArchive()) { archive.AddAllFromDirectory(@"D:\data"); @@ -313,7 +313,7 @@ LZMA compression is very powerful but memory-intensive: // - Better compression: larger dictionary // Preset via CompressionType -using (var archive = TarArchive.Create()) +using (var archive = TarArchive.CreateArchive()) { archive.AddAllFromDirectory(@"D:\data"); archive.SaveTo("archive.tar.xz", CompressionType.LZMA); // Default settings @@ -333,7 +333,7 @@ Async is beneficial when: ```csharp // Async extraction (non-blocking) -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { await archive.WriteToDirectoryAsync( @"C:\output", @@ -353,7 +353,7 @@ Async doesn't improve performance for: ```csharp // Sync extraction (simpler, same performance on fast I/O) -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { archive.WriteToDirectory( @"C:\output", @@ -373,7 +373,7 @@ cts.CancelAfter(TimeSpan.FromMinutes(5)); try { - using (var archive = ZipArchive.Open("archive.zip")) + using (var archive = ZipArchive.OpenArchive("archive.zip")) { await archive.WriteToDirectoryAsync( @"C:\output", @@ -408,14 +408,14 @@ catch (OperationCanceledException) // ✗ Slow - opens each archive separately foreach (var file in files) { - using (var archive = ZipArchive.Open("archive.zip")) + using (var archive = ZipArchive.OpenArchive("archive.zip")) { archive.WriteToDirectory(@"C:\output"); } } // ✓ Better - process multiple entries at once -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { archive.WriteToDirectory(@"C:\output"); } @@ -425,7 +425,7 @@ using (var archive = ZipArchive.Open("archive.zip")) ```csharp var sw = Stopwatch.StartNew(); -using (var archive = ZipArchive.Open("large.zip")) +using (var archive = ZipArchive.OpenArchive("large.zip")) { archive.WriteToDirectory(@"C:\output"); } diff --git a/docs/USAGE.md b/docs/USAGE.md index a4351062..52d690a3 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -90,7 +90,7 @@ Note: Extracting a solid rar or 7z file needs to be done in sequential order to `ExtractAllEntries` is primarily intended for solid archives (like solid Rar) or 7Zip archives, where sequential extraction provides the best performance. For general/simple extraction with any supported archive type, use `archive.WriteToDirectory()` instead. ```C# -using (var archive = RarArchive.Open("Test.rar")) +using (var archive = RarArchive.OpenArchive("Test.rar")) { // Simple extraction with RarArchive; this WriteToDirectory pattern works for all archive types archive.WriteToDirectory(@"D:\temp", new ExtractionOptions() @@ -104,7 +104,7 @@ using (var archive = RarArchive.Open("Test.rar")) ### Iterate over all files from a Rar file using RarArchive ```C# -using (var archive = RarArchive.Open("Test.rar")) +using (var archive = RarArchive.OpenArchive("Test.rar")) { foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory)) { @@ -126,7 +126,7 @@ var progress = new Progress(report => Console.WriteLine($"Extracting {report.EntryPath}: {report.PercentComplete}%"); }); -using (var archive = RarArchive.Open("archive.rar", new ReaderOptions { Progress = progress })) // Must be solid Rar or 7Zip +using (var archive = RarArchive.OpenArchive("archive.rar", new ReaderOptions { Progress = progress })) // Must be solid Rar or 7Zip { archive.WriteToDirectory(@"D:\output", new ExtractionOptions() { @@ -140,7 +140,7 @@ using (var archive = RarArchive.Open("archive.rar", new ReaderOptions { Progress ```C# using (Stream stream = File.OpenRead("Tar.tar.bz2")) -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { while (reader.MoveToNextEntry()) { @@ -161,7 +161,7 @@ using (var reader = ReaderFactory.Open(stream)) ```C# using (Stream stream = File.OpenRead("Tar.tar.bz2")) -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { while (reader.MoveToNextEntry()) { @@ -180,7 +180,7 @@ using (var reader = ReaderFactory.Open(stream)) ```C# using (Stream stream = File.OpenWrite("C:\\temp.tgz")) -using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, new WriterOptions(CompressionType.GZip) +using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Tar, new WriterOptions(CompressionType.GZip) { LeaveOpenStream = true })) @@ -199,7 +199,7 @@ opts.ArchiveEncoding.CustomDecoder = (data, x, y) => { return encoding.GetString(data); }; -var tr = SharpCompress.Archives.Zip.ZipArchive.Open("test.zip", opts); +var tr = SharpCompress.Archives.Zip.ZipArchive.OpenArchive("test.zip", opts); foreach(var entry in tr.Entries) { Console.WriteLine($"{entry.Key}"); @@ -213,7 +213,7 @@ foreach(var entry in tr.Entries) **Extract single entry asynchronously:** ```C# using (Stream stream = File.OpenRead("archive.zip")) -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { while (reader.MoveToNextEntry()) { @@ -234,7 +234,7 @@ using (var reader = ReaderFactory.Open(stream)) **Extract all entries asynchronously:** ```C# using (Stream stream = File.OpenRead("archive.tar.gz")) -using (var reader = ReaderFactory.Open(stream)) +using (var reader = ReaderFactory.OpenReader(stream)) { await reader.WriteAllToDirectoryAsync( @"D:\temp", @@ -250,7 +250,7 @@ using (var reader = ReaderFactory.Open(stream)) **Open and process entry stream asynchronously:** ```C# -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { foreach (var entry in archive.Entries.Where(e => !e.IsDirectory)) { @@ -268,7 +268,7 @@ using (var archive = ZipArchive.Open("archive.zip")) **Write single file asynchronously:** ```C# using (Stream archiveStream = File.OpenWrite("output.zip")) -using (var writer = WriterFactory.Open(archiveStream, ArchiveType.Zip, CompressionType.Deflate)) +using (var writer = WriterFactory.OpenWriter(archiveStream, ArchiveType.Zip, CompressionType.Deflate)) { using (Stream fileStream = File.OpenRead("input.txt")) { @@ -280,7 +280,7 @@ using (var writer = WriterFactory.Open(archiveStream, ArchiveType.Zip, Compressi **Write entire directory asynchronously:** ```C# using (Stream stream = File.OpenWrite("backup.tar.gz")) -using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, new WriterOptions(CompressionType.GZip))) +using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Tar, new WriterOptions(CompressionType.GZip))) { await writer.WriteAllAsync( @"D:\files", @@ -299,7 +299,7 @@ var cts = new CancellationTokenSource(); cts.CancelAfter(TimeSpan.FromMinutes(5)); using (Stream stream = File.OpenWrite("archive.zip")) -using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType.Deflate)) +using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Zip, CompressionType.Deflate)) { try { @@ -316,7 +316,7 @@ using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType. **Extract from archive asynchronously:** ```C# -using (var archive = ZipArchive.Open("archive.zip")) +using (var archive = ZipArchive.OpenArchive("archive.zip")) { // Simple async extraction - works for all archive types await archive.WriteToDirectoryAsync(