More .NET libraries
-
Rebex Total Pack
All Rebex .NET libraries together
Back to feature list...
Single file operations
On this page:
Single-file compression and decompression
Use AddFile method to add a single file to a ZIP archive, and ExtractFile method to unpack it.
using (var zip = new ZipArchive(@"C:\MyData\archive.zip"))
{
// add a file to the root of the ZIP archive
zip.AddFile(@"C:\MyData\file1.txt");
// extract a file from the ZIP archive
// (new name "extracted.txt" is used for extracted file)
zip.ExtractFile("file1.txt", @"C:\MyData\Out\extracted.txt");
}
An exception is thrown if a file with the same name already exists in the target location.
To choose a different behavior, pass a suitable
ActionOnExistingFiles argument.
To check whether a file exists in a ZIP archive, use FileExists method.
See Checking file existence for details.
Stream-based compression and decompression
Both AddFile and ExtractFile methods accept an instance of System.IO.Stream class, making it possible to
implement stream-based data processing.
For example, .NET's MemoryStream is useful for processing short files in memory without having to create temporary files in the local file system.
Add memory-based file data:
// prepare content in memory string content = "Some text"; var stream = new MemoryStream(Encoding.UTF8.GetBytes(content)); // add a file from stream zip.AddFile(stream, "file1.txt");
Extract packed file into a memory stream:
// prepare stream for extracted data
var stream = new MemoryStream();
// extract a file into memory
zip.ExtractFile("file1.txt", stream);
Deleting a file
To delete a file from a ZIP archive, use DeleteFile method.
// delete a file in ZIP archive
zip.DeleteFile("file1.txt");
Tip: To delete multiple files or non-empty directories,
use Delete method.
Renaming or moving a file
To rename a file (or a directory) in a ZIP archive, use ZipItem object's Rename method.
Alternatively, use the Move method which also makes it possible to move file to another directory inside the ZIP archive.
// rename a file
zip["file1.txt"].Rename("renamed.txt");
// move a file
zip.Move("/file2.txt", "/moved/file2.txt");
// move a file and rename it as well
zip.Move("/file3.txt", "/moved/renamed.txt");
Checking file existence
To check whether a file already exists in a ZIP archive, use FileExists method.
This is useful, for example, when you are about to add a new file, but would like to ask the user whether to overwrite an existing target file first.
// determine whether a particular files are in the ZIP archive
bool hasReadme = zip.FileExists("readme.txt");
bool hasWebDefault = zip.FileExists("/web/default.html");
Getting file length
To determine a length of a file in a ZIP archive, use ZipItem object's Length property.
There is also a CompressedLength property that holds the compressed file length.
// get uncompressed file size (in bytes)
long fileByteSize = zip["file1.txt"].Length;
// get compressed size (in bytes) of a file in the ZIP archive
long compressedByteSize = zip["file1.txt"].CompressedLength;
// display compression ratio
double ratio = 100.0 * compressedByteSize / fileByteSize;
Console.WriteLine("Compressed to {0:0.00}%", ratio);
Getting and setting file date/time
To get or set dates and times of an item in a ZIP archive,
use CreationTime, LastWriteTime and LastAccessTime properties of the ZipItem class.
Getting date and time:
// get information about dates and times of a file DateTime? lastAccess = zip["file1.txt"].LastAccessTime; DateTime? lastWrite = zip["file1.txt"].LastWriteTime; DateTime? creation = zip["file1.txt"].CreationTime;
Setting date and time:
// set dates and times of a file zip["file1.txt"].CreationTime = DateTime.Now; zip["file1.txt"].LastWriteTime = DateTime.Now; zip["file1.txt"].LastAccessTime = DateTime.Now;
Checksums and data integrity
ZIP format uses CRC-32 checksums to ensure data integrity. A check is performed automatically during extraction of each file.
However, it's possible to access the checksum using ZipItem object's Crc32 property.
// get CRC-32 checksum of a file long checksum = zip["file1.txt"].Crc32;
Tip: To perform CRC-32 check after addition of files as well,
set ZipArchive.Options.ChecksumVerificationMode property to ChecksumVerificationMode.AddAndExtract.
Resolving symlinks
To check if a particular file is a symbolic link, use ZipItem object's IsLink property.
To determine the link target, use LinkTarget property.
// check whether a file is a symlink
if (zip["file1.txt"].IsLink)
{
// get link target
string target = zip["file1.txt"].LinkTarget;
// process the link
// ...
}
Back to feature list...