Closed
Description
Rationale and usage
The ZipFile.CreateFromDirectory
signatures all assume that we want to write the resulting file directly to the file system. But for small archives that are directly uploaded to cloud storage, this is not very efficient.
Symmetrically, ZipFile.ExtractToDirectory
overloads that take a zip stream rather than a file would be convenient to unzip cloud archives directly onto a drive.
Proposed API
Zipping
namespace System.IO.Compression;
public static class ZipFile
{
+ public static void CreateFromDirectory(string sourceDirectoryName, Stream destination)
+ public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, CompressionLevel compressionLevel, bool includeBaseDirectory)
+ public static void CreateFromDirectory(string sourceDirectoryName, Stream destination, CompressionLevel compressionLevel, bool includeBaseDirectory, Encoding? entryNameEncoding)
public static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName)
public static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel, bool includeBaseDirectory)
public static void CreateFromDirectory(string sourceDirectoryName, string destinationArchiveFileName, CompressionLevel compressionLevel, bool includeBaseDirectory, Encoding? entryNameEncoding)
}
Unzipping
namespace System.IO.Compression;
public static class ZipFile
{
+ public static void ExtractToDirectory(Stream source, string destinationDirectoryName) { }
+ public static void ExtractToDirectory(Stream source, string destinationDirectoryName, bool overwriteFiles) { }
+ public static void ExtractToDirectory(Stream source, string destinationDirectoryName, Encoding? entryNameEncoding) { }
+ public static void ExtractToDirectory(Stream source, string destinationDirectoryName, Encoding? entryNameEncoding, bool overwriteFiles) { }
public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName) { }
public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, bool overwriteFiles) { }
public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, Encoding? entryNameEncoding) { }
public static void ExtractToDirectory(string sourceArchiveFileName, string destinationDirectoryName, Encoding? entryNameEncoding, bool overwriteFiles)
}
There is a discussion below to also add overloads to ZipFile.Open
that take a stream instead of a string, but there doesn't seem to be much value on adding those because the user can simply use new ZipArchive(Stream, ZipArchiveMode)
.
These APIs are analogous to the ones we already added in System.Formats.Tar.TarFile.