more updates to docs

This commit is contained in:
Adam Hathcock
2026-01-15 13:29:57 +00:00
parent bf7416753a
commit b41296194f
5 changed files with 75 additions and 75 deletions

View File

@@ -8,17 +8,17 @@ Quick reference for commonly used SharpCompress APIs.
```csharp ```csharp
// Auto-detect format // Auto-detect format
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
// Works with Zip, Tar, GZip, Rar, 7Zip, etc. // Works with Zip, Tar, GZip, Rar, 7Zip, etc.
} }
// Specific format - Archive API // Specific format - Archive API
using (var archive = ZipArchive.Open("file.zip")) using (var archive = ZipArchive.OpenArchive("file.zip"))
using (var archive = TarArchive.Open("file.tar")) using (var archive = TarArchive.OpenArchive("file.tar"))
using (var archive = RarArchive.Open("file.rar")) using (var archive = RarArchive.OpenArchive("file.rar"))
using (var archive = SevenZipArchive.Open("file.7z")) using (var archive = SevenZipArchive.OpenArchive("file.7z"))
using (var archive = GZipArchive.Open("file.gz")) using (var archive = GZipArchive.OpenArchive("file.gz"))
// With options // With options
var options = new ReaderOptions var options = new ReaderOptions
@@ -27,14 +27,14 @@ var options = new ReaderOptions
LeaveStreamOpen = true, LeaveStreamOpen = true,
ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } 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 ### Creating Archives
```csharp ```csharp
// Writer Factory // Writer Factory
using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType.Deflate)) using (var writer = WriterFactory.OpenWriter(stream, ArchiveType.Zip, CompressionType.Deflate))
{ {
// Write entries // Write entries
} }
@@ -63,7 +63,7 @@ using (var archive = ZipArchive.CreateArchive())
### Reading/Extracting ### Reading/Extracting
```csharp ```csharp
using (var archive = ZipArchive.Open("file.zip")) using (var archive = ZipArchive.OpenArchive("file.zip"))
{ {
// Get all entries // Get all entries
IEnumerable<IArchiveEntry> entries = archive.Entries; IEnumerable<IArchiveEntry> entries = archive.Entries;
@@ -151,7 +151,7 @@ using (var archive = ZipArchive.CreateArchive())
```csharp ```csharp
using (var stream = File.OpenRead("file.zip")) using (var stream = File.OpenRead("file.zip"))
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -201,7 +201,7 @@ using (var reader = await ReaderFactory.OpenAsyncReader(stream))
```csharp ```csharp
using (var stream = File.Create("output.zip")) 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 // Write single file
using (var fileStream = File.OpenRead("source.txt")) using (var fileStream = File.OpenRead("source.txt"))
@@ -239,7 +239,7 @@ var options = new ReaderOptions
Default = Encoding.GetEncoding(932) 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 // For Tar archives with compression
// Use WriterFactory to create compressed tar archives // Use WriterFactory to create compressed tar archives
using (var writer = WriterFactory.Open(stream, ArchiveType.Tar, CompressionType.GZip)) // Tar.GZip using (var writer = WriterFactory.OpenWriter(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.BZip2)) // Tar.BZip2
``` ```
### Archive Types ### Archive Types
@@ -349,7 +349,7 @@ var progress = new Progress<ProgressReport>(report =>
}); });
var options = new ReaderOptions { Progress = progress }; 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"); archive.WriteToDirectory(@"C:\output");
} }
@@ -425,7 +425,7 @@ using (var archive = ZipArchive.CreateArchive())
### Extract Specific Files ### Extract Specific Files
```csharp ```csharp
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
var filesToExtract = new[] { "file1.txt", "file2.txt" }; var filesToExtract = new[] { "file1.txt", "file2.txt" };
@@ -439,7 +439,7 @@ using (var archive = ZipArchive.Open("archive.zip"))
### List Archive Contents ### List Archive Contents
```csharp ```csharp
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
foreach (var entry in archive.Entries) foreach (var entry in archive.Entries)
{ {
@@ -459,7 +459,7 @@ using (var archive = ZipArchive.Open("archive.zip"))
```csharp ```csharp
var stream = File.OpenRead("archive.zip"); var stream = File.OpenRead("archive.zip");
var archive = ZipArchive.Open(stream); var archive = ZipArchive.OpenArchive(stream);
archive.WriteToDirectory(@"C:\output"); archive.WriteToDirectory(@"C:\output");
// stream not disposed - leaked resource // stream not disposed - leaked resource
``` ```
@@ -468,7 +468,7 @@ archive.WriteToDirectory(@"C:\output");
```csharp ```csharp
using (var stream = File.OpenRead("archive.zip")) using (var stream = File.OpenRead("archive.zip"))
using (var archive = ZipArchive.Open(stream)) using (var archive = ZipArchive.OpenArchive(stream))
{ {
archive.WriteToDirectory(@"C:\output"); archive.WriteToDirectory(@"C:\output");
} }
@@ -479,7 +479,7 @@ using (var archive = ZipArchive.Open(stream))
```csharp ```csharp
// Loading entire archive then iterating // 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 var entries = archive.Entries.ToList(); // Loads all in memory
foreach (var e in entries) foreach (var e in entries)
@@ -494,7 +494,7 @@ using (var archive = ZipArchive.Open("large.zip"))
```csharp ```csharp
// Streaming iteration // Streaming iteration
using (var stream = File.OpenRead("large.zip")) using (var stream = File.OpenRead("large.zip"))
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {

View File

@@ -76,7 +76,7 @@ Factory classes for auto-detecting archive format and creating appropriate reade
- Format-specific: `ZipFactory.cs`, `TarFactory.cs`, `RarFactory.cs`, etc. - Format-specific: `ZipFactory.cs`, `TarFactory.cs`, `RarFactory.cs`, etc.
**How It Works:** **How It Works:**
1. `ReaderFactory.Open(stream)` probes stream signatures 1. `ReaderFactory.OpenReader(stream)` probes stream signatures
2. Identifies format by magic bytes 2. Identifies format by magic bytes
3. Creates appropriate reader instance 3. Creates appropriate reader instance
4. Returns generic `IReader` interface 4. Returns generic `IReader` interface
@@ -142,7 +142,7 @@ Stream wrappers and utilities.
**Example:** **Example:**
```csharp ```csharp
// User calls factory // User calls factory
using (var reader = ReaderFactory.Open(stream)) // Returns IReader using (var reader = ReaderFactory.OpenReader(stream)) // Returns IReader
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -175,7 +175,7 @@ CompressionType.LZMA // LZMA
CompressionType.PPMd // PPMd CompressionType.PPMd // PPMd
// Writer uses strategy pattern // Writer uses strategy pattern
var archive = ZipArchive.Create(); var archive = ZipArchive.CreateArchive();
archive.SaveTo("output.zip", CompressionType.Deflate); // Use Deflate archive.SaveTo("output.zip", CompressionType.Deflate); // Use Deflate
archive.SaveTo("output.bz2", CompressionType.BZip2); // Use BZip2 archive.SaveTo("output.bz2", CompressionType.BZip2); // Use BZip2
``` ```
@@ -248,7 +248,7 @@ foreach (var entry in entries)
} }
// Reader API - provides iterator // Reader API - provides iterator
IReader reader = ReaderFactory.Open(stream); IReader reader = ReaderFactory.OpenReader(stream);
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
// Forward-only iteration - one entry at a time // Forward-only iteration - one entry at a time
@@ -381,7 +381,7 @@ public class NewFormatArchive : AbstractArchive
private NewFormatHeader _header; private NewFormatHeader _header;
private List<NewFormatEntry> _entries; private List<NewFormatEntry> _entries;
public static NewFormatArchive Open(Stream stream) public static NewFormatArchive OpenArchive(Stream stream)
{ {
var archive = new NewFormatArchive(); var archive = new NewFormatArchive();
archive._header = NewFormatHeader.Read(stream); archive._header = NewFormatHeader.Read(stream);
@@ -443,7 +443,7 @@ public class NewFormatFactory : Factory, IArchiveFactory, IReaderFactory
public static NewFormatFactory Instance { get; } = new(); public static NewFormatFactory Instance { get; } = new();
public IArchive CreateArchive(Stream stream) public IArchive CreateArchive(Stream stream)
=> NewFormatArchive.Open(stream); => NewFormatArchive.OpenArchive(stream);
public IReader CreateReader(Stream stream, ReaderOptions options) public IReader CreateReader(Stream stream, ReaderOptions options)
=> new NewFormatReader(stream) { Options = options }; => new NewFormatReader(stream) { Options = options };
@@ -481,7 +481,7 @@ public class NewFormatTests : TestBase
public void NewFormat_Extracts_Successfully() public void NewFormat_Extracts_Successfully()
{ {
var archivePath = Path.Combine(TEST_ARCHIVES_PATH, "archive.newformat"); 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); archive.WriteToDirectory(SCRATCH_FILES_PATH);
// Assert extraction // Assert extraction
@@ -561,7 +561,7 @@ public class CustomStream : Stream
```csharp ```csharp
// Correct: Nested using blocks // Correct: Nested using blocks
using (var fileStream = File.OpenRead("archive.zip")) using (var fileStream = File.OpenRead("archive.zip"))
using (var archive = ZipArchive.Open(fileStream)) using (var archive = ZipArchive.OpenArchive(fileStream))
{ {
archive.WriteToDirectory(@"C:\output"); archive.WriteToDirectory(@"C:\output");
} }
@@ -570,7 +570,7 @@ using (var archive = ZipArchive.Open(fileStream))
// Correct: Using with options // Correct: Using with options
var options = new ReaderOptions { LeaveStreamOpen = true }; var options = new ReaderOptions { LeaveStreamOpen = true };
var stream = File.OpenRead("archive.zip"); var stream = File.OpenRead("archive.zip");
using (var archive = ZipArchive.Open(stream, options)) using (var archive = ZipArchive.OpenArchive(stream, options))
{ {
archive.WriteToDirectory(@"C:\output"); archive.WriteToDirectory(@"C:\output");
} }
@@ -641,7 +641,7 @@ public void Archive_Extraction_Works()
var testArchive = Path.Combine(TEST_ARCHIVES_PATH, "test.zip"); var testArchive = Path.Combine(TEST_ARCHIVES_PATH, "test.zip");
// Act // Act
using (var archive = ZipArchive.Open(testArchive)) using (var archive = ZipArchive.OpenArchive(testArchive))
{ {
archive.WriteToDirectory(SCRATCH_FILES_PATH); archive.WriteToDirectory(SCRATCH_FILES_PATH);
} }

View File

@@ -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) foreach (var entry in archive.Entries)
{ {
@@ -51,7 +51,7 @@ var options = new ReaderOptions
{ {
ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } 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 // Use archive with correct encoding
} }
@@ -64,7 +64,7 @@ var options = new ReaderOptions
ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) }
}; };
using (var stream = File.OpenRead("file.zip")) using (var stream = File.OpenRead("file.zip"))
using (var reader = ReaderFactory.Open(stream, options)) using (var reader = ReaderFactory.OpenReader(stream, options))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -89,7 +89,7 @@ var options = new ReaderOptions
Default = Encoding.GetEncoding(932) Default = Encoding.GetEncoding(932)
} }
}; };
using (var archive = ZipArchive.Open("japanese.zip", options)) using (var archive = ZipArchive.OpenArchive("japanese.zip", options))
{ {
// Correctly decodes Japanese filenames // Correctly decodes Japanese filenames
} }
@@ -266,7 +266,7 @@ SharpCompress attempts to auto-detect encoding, but this isn't always reliable:
```csharp ```csharp
// Auto-detection (default) // 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 // May show corrupted characters if archive uses different encoding
} }
@@ -276,7 +276,7 @@ var options = new ReaderOptions
{ {
ArchiveEncoding = new ArchiveEncoding { Default = Encoding.GetEncoding(932) } 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 // 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) 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 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"); 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"); 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"); archive.WriteToDirectory(@"C:\output");
} }
@@ -463,7 +463,7 @@ var options = new ReaderOptions
}; };
using (var stream = File.OpenRead("japanese.zip")) using (var stream = File.OpenRead("japanese.zip"))
using (var reader = ReaderFactory.Open(stream, options)) using (var reader = ReaderFactory.OpenReader(stream, options))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -484,7 +484,7 @@ When creating archives, SharpCompress uses UTF8 by default (recommended):
```csharp ```csharp
// Create with UTF8 (default, recommended) // Create with UTF8 (default, recommended)
using (var archive = ZipArchive.Create()) using (var archive = ZipArchive.CreateArchive())
{ {
archive.AddAllFromDirectory(@"D:\my_files"); archive.AddAllFromDirectory(@"D:\my_files");
archive.SaveTo("output.zip", CompressionType.Deflate); archive.SaveTo("output.zip", CompressionType.Deflate);

View File

@@ -24,7 +24,7 @@ Choose the right API based on your use case:
// - You need random access to entries // - You need random access to entries
// - Stream is seekable (file, MemoryStream) // - Stream is seekable (file, MemoryStream)
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
// Random access - all entries available // Random access - all entries available
var specific = archive.Entries.FirstOrDefault(e => e.Key == "file.txt"); 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 // - Forward-only processing is acceptable
using (var stream = File.OpenRead("large.zip")) using (var stream = File.OpenRead("large.zip"))
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -129,7 +129,7 @@ For processing archives from downloads or pipes:
```csharp ```csharp
// Download stream (non-seekable) // Download stream (non-seekable)
using (var httpStream = await httpClient.GetStreamAsync(url)) using (var httpStream = await httpClient.GetStreamAsync(url))
using (var reader = ReaderFactory.Open(httpStream)) using (var reader = ReaderFactory.OpenReader(httpStream))
{ {
// Process entries as they arrive // Process entries as they arrive
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
@@ -159,14 +159,14 @@ Choose based on your constraints:
```csharp ```csharp
// Download then extract (requires disk space) // Download then extract (requires disk space)
var archivePath = await DownloadFile(url, @"C:\temp\archive.zip"); 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"); archive.WriteToDirectory(@"C:\output");
} }
// Stream during download (on-the-fly extraction) // Stream during download (on-the-fly extraction)
using (var httpStream = await httpClient.GetStreamAsync(url)) using (var httpStream = await httpClient.GetStreamAsync(url))
using (var reader = ReaderFactory.Open(httpStream)) using (var reader = ReaderFactory.OpenReader(httpStream))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -198,7 +198,7 @@ Extracting File3 requires decompressing File1 and File2 first.
**Random Extraction (Slow):** **Random Extraction (Slow):**
```csharp ```csharp
using (var archive = RarArchive.Open("solid.rar")) using (var archive = RarArchive.OpenArchive("solid.rar"))
{ {
foreach (var entry in archive.Entries) foreach (var entry in archive.Entries)
{ {
@@ -210,7 +210,7 @@ using (var archive = RarArchive.Open("solid.rar"))
**Sequential Extraction (Fast):** **Sequential Extraction (Fast):**
```csharp ```csharp
using (var archive = RarArchive.Open("solid.rar")) using (var archive = RarArchive.OpenArchive("solid.rar"))
{ {
// Method 1: Use WriteToDirectory (recommended) // Method 1: Use WriteToDirectory (recommended)
archive.WriteToDirectory(@"C:\output", new ExtractionOptions archive.WriteToDirectory(@"C:\output", new ExtractionOptions
@@ -256,7 +256,7 @@ using (var archive = RarArchive.Open("solid.rar"))
// Level 9 = Slowest, best compression // Level 9 = Slowest, best compression
// Write with different compression levels // Write with different compression levels
using (var archive = ZipArchive.Create()) using (var archive = ZipArchive.CreateArchive())
{ {
archive.AddAllFromDirectory(@"D:\data"); archive.AddAllFromDirectory(@"D:\data");
@@ -293,7 +293,7 @@ using (var archive = ZipArchive.Create())
// Smaller block size = lower memory, faster // Smaller block size = lower memory, faster
// Larger block size = better compression, slower // Larger block size = better compression, slower
using (var archive = TarArchive.Create()) using (var archive = TarArchive.CreateArchive())
{ {
archive.AddAllFromDirectory(@"D:\data"); archive.AddAllFromDirectory(@"D:\data");
@@ -313,7 +313,7 @@ LZMA compression is very powerful but memory-intensive:
// - Better compression: larger dictionary // - Better compression: larger dictionary
// Preset via CompressionType // Preset via CompressionType
using (var archive = TarArchive.Create()) using (var archive = TarArchive.CreateArchive())
{ {
archive.AddAllFromDirectory(@"D:\data"); archive.AddAllFromDirectory(@"D:\data");
archive.SaveTo("archive.tar.xz", CompressionType.LZMA); // Default settings archive.SaveTo("archive.tar.xz", CompressionType.LZMA); // Default settings
@@ -333,7 +333,7 @@ Async is beneficial when:
```csharp ```csharp
// Async extraction (non-blocking) // Async extraction (non-blocking)
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
await archive.WriteToDirectoryAsync( await archive.WriteToDirectoryAsync(
@"C:\output", @"C:\output",
@@ -353,7 +353,7 @@ Async doesn't improve performance for:
```csharp ```csharp
// Sync extraction (simpler, same performance on fast I/O) // 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( archive.WriteToDirectory(
@"C:\output", @"C:\output",
@@ -373,7 +373,7 @@ cts.CancelAfter(TimeSpan.FromMinutes(5));
try try
{ {
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
await archive.WriteToDirectoryAsync( await archive.WriteToDirectoryAsync(
@"C:\output", @"C:\output",
@@ -408,14 +408,14 @@ catch (OperationCanceledException)
// ✗ Slow - opens each archive separately // ✗ Slow - opens each archive separately
foreach (var file in files) foreach (var file in files)
{ {
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
archive.WriteToDirectory(@"C:\output"); archive.WriteToDirectory(@"C:\output");
} }
} }
// ✓ Better - process multiple entries at once // ✓ Better - process multiple entries at once
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
archive.WriteToDirectory(@"C:\output"); archive.WriteToDirectory(@"C:\output");
} }
@@ -425,7 +425,7 @@ using (var archive = ZipArchive.Open("archive.zip"))
```csharp ```csharp
var sw = Stopwatch.StartNew(); var sw = Stopwatch.StartNew();
using (var archive = ZipArchive.Open("large.zip")) using (var archive = ZipArchive.OpenArchive("large.zip"))
{ {
archive.WriteToDirectory(@"C:\output"); archive.WriteToDirectory(@"C:\output");
} }

View File

@@ -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. `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# ```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 // Simple extraction with RarArchive; this WriteToDirectory pattern works for all archive types
archive.WriteToDirectory(@"D:\temp", new ExtractionOptions() 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 ### Iterate over all files from a Rar file using RarArchive
```C# ```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)) foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory))
{ {
@@ -126,7 +126,7 @@ var progress = new Progress<ProgressReport>(report =>
Console.WriteLine($"Extracting {report.EntryPath}: {report.PercentComplete}%"); 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() archive.WriteToDirectory(@"D:\output", new ExtractionOptions()
{ {
@@ -140,7 +140,7 @@ using (var archive = RarArchive.Open("archive.rar", new ReaderOptions { Progress
```C# ```C#
using (Stream stream = File.OpenRead("Tar.tar.bz2")) using (Stream stream = File.OpenRead("Tar.tar.bz2"))
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -161,7 +161,7 @@ using (var reader = ReaderFactory.Open(stream))
```C# ```C#
using (Stream stream = File.OpenRead("Tar.tar.bz2")) using (Stream stream = File.OpenRead("Tar.tar.bz2"))
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -180,7 +180,7 @@ using (var reader = ReaderFactory.Open(stream))
```C# ```C#
using (Stream stream = File.OpenWrite("C:\\temp.tgz")) 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 LeaveOpenStream = true
})) }))
@@ -199,7 +199,7 @@ opts.ArchiveEncoding.CustomDecoder = (data, x, y) =>
{ {
return encoding.GetString(data); 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) foreach(var entry in tr.Entries)
{ {
Console.WriteLine($"{entry.Key}"); Console.WriteLine($"{entry.Key}");
@@ -213,7 +213,7 @@ foreach(var entry in tr.Entries)
**Extract single entry asynchronously:** **Extract single entry asynchronously:**
```C# ```C#
using (Stream stream = File.OpenRead("archive.zip")) using (Stream stream = File.OpenRead("archive.zip"))
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
while (reader.MoveToNextEntry()) while (reader.MoveToNextEntry())
{ {
@@ -234,7 +234,7 @@ using (var reader = ReaderFactory.Open(stream))
**Extract all entries asynchronously:** **Extract all entries asynchronously:**
```C# ```C#
using (Stream stream = File.OpenRead("archive.tar.gz")) using (Stream stream = File.OpenRead("archive.tar.gz"))
using (var reader = ReaderFactory.Open(stream)) using (var reader = ReaderFactory.OpenReader(stream))
{ {
await reader.WriteAllToDirectoryAsync( await reader.WriteAllToDirectoryAsync(
@"D:\temp", @"D:\temp",
@@ -250,7 +250,7 @@ using (var reader = ReaderFactory.Open(stream))
**Open and process entry stream asynchronously:** **Open and process entry stream asynchronously:**
```C# ```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)) 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:** **Write single file asynchronously:**
```C# ```C#
using (Stream archiveStream = File.OpenWrite("output.zip")) 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")) using (Stream fileStream = File.OpenRead("input.txt"))
{ {
@@ -280,7 +280,7 @@ using (var writer = WriterFactory.Open(archiveStream, ArchiveType.Zip, Compressi
**Write entire directory asynchronously:** **Write entire directory asynchronously:**
```C# ```C#
using (Stream stream = File.OpenWrite("backup.tar.gz")) 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( await writer.WriteAllAsync(
@"D:\files", @"D:\files",
@@ -299,7 +299,7 @@ var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromMinutes(5)); cts.CancelAfter(TimeSpan.FromMinutes(5));
using (Stream stream = File.OpenWrite("archive.zip")) 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 try
{ {
@@ -316,7 +316,7 @@ using (var writer = WriterFactory.Open(stream, ArchiveType.Zip, CompressionType.
**Extract from archive asynchronously:** **Extract from archive asynchronously:**
```C# ```C#
using (var archive = ZipArchive.Open("archive.zip")) using (var archive = ZipArchive.OpenArchive("archive.zip"))
{ {
// Simple async extraction - works for all archive types // Simple async extraction - works for all archive types
await archive.WriteToDirectoryAsync( await archive.WriteToDirectoryAsync(