A managed wrapper (and then some) around libzip (https://libzip.org/)
The core of LibZipSharp is the ZipArchive class. You can use this class
to create/extract/update zip file.
To create a new archive use the FileMode.CreateNew, this will behave
exactly as it does with normal File operations. An exception will be
thrown if the file already exists.
using (var zip = ZipArchive.Open ("test.zip", FileMode.CreateNew)) {
}
To open an existing zip file use FileMode.Open.
using (var zip = ZipArchive.Open ("test.zip", FileMode.Open)) {
}
There are a number of methods which can be used to add items to
the zip file. The simplest is AddFile. This takes a file path.
If filename is an absolute path, it will be converted to a relative
one by removing the root of the path (i.e. the leading / part on
Unix systems and the x:\\ part on Windows). You can also pass an
archivePath parameter where you can specify the name/path which file
will have within the archive.
using (var zip = ZipArchive.Open ("test.zip", FileMode.CreateNew)) {
zip.AddFile ("somefile.txt");
}
You can also add data directly from a MemoryStream via the AddEntry
method. This takes an entryName and a MemoryStream. Note the MemoryStream
will be disposed of when the zip file is finally written to disk.
var ms = new MemoryStream ();
// write data to stream.
using (var zip = ZipArchive.Open ("test.zip", FileMode.CreateNew)) {
zip.AddEntry ("foo", ms);
}
You can also add text directly via the AddEntry method. This method
takes an entryName and text parameters. The entryName defines
what the item in the zip file will be called. The text defines the contents
on the entry. There is also an encoding parameter where you can define
the Encoding of the file.
using (var zip = ZipArchive.Open ("test.zip", FileMode.CreateNew)) {
zip.AddEntry ("foo", "contents of the file", Encoding.UTF8);
}
By default the native libraries will NOT be copied into the output directory
of your app. .Net Core apps will pick these files up automatically. However
for Mono you will need the libzip.* files in the same directory as the
final app for this library to work. Setting the LibZipSharpBundleAllNativeLibraries
MSBuild property to true will make sure the native libraries for
ALL supported platforms are copied to the output directory.
You can do this via the command line
/p:LibZipSharpBundleAllNativeLibraries=True
or by adding the following to you csproj.
<LibZipSharpBundleAllNativeLibraries>true</LibZipSharpBundleAllNativeLibraries>