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...