More .NET libraries
-
Rebex Total Pack
All Rebex .NET libraries together
Back to feature list...
ZipItem class
On this page:
ZipItem properties
To access a particular file (or other item) stored within a ZIP archive, use the ZipItem
class.
It provides various information about the item:
// open a ZIP archive
var zip = new ZipArchive(path, ArchiveOpenMode.Open);
// get instance of "/data/file1.txt" ZIP item
ZipItem item = zip["/data/file1.txt"];
// display general info
Console.WriteLine("Path: {0} (name: {1})", item.Path, item.Name);
Console.WriteLine("Length: {0} B (compressed: {1} B)", item.Length, item.CompressedLength);
Console.WriteLine("Comment: {0}", item.Comment);
Console.WriteLine("Compression method: {0}", item.CompressionMethod);
if (item.IsEncrypted)
{
Console.WriteLine("Encryption method: {0}", item.EncryptionAlgorithm);
}
Console.WriteLine("CRC-32: {0:X8}", item.Crc32);
Console.WriteLine("Already deleted: {0}", item.IsDeleted);
Console.WriteLine("Can be extracted: {0}", item.CanExtract);
// display type info
Console.WriteLine("Type: {0}", item.ItemType);
Console.WriteLine(" Is file: {0}", item.IsFile);
Console.WriteLine(" Is directory: {0}", item.IsDirectory);
Console.WriteLine(" Is root: {0}", item.IsRootDirectory);
Console.WriteLine(" Is empty: {0}", item.IsEmptyDirectory);
Console.WriteLine(" Is link: {0} (target: '{1}')", item.IsLink, item.LinkTarget);
// display time info
Console.WriteLine("Accessed: {0}", item.LastAccessTime);
Console.WriteLine("Modified: {0}", item.LastWriteTime);
Console.WriteLine("Created: {0}", item.CreationTime);
// display UNIX permissions
if (item.UnixPermissions.HasValue)
{
Console.WriteLine("UNIX Permissions: {0}", item.UnixPermissions);
Console.WriteLine("UNIX Group ID: {0}", item.UnixGroupId);
Console.WriteLine("UNIX Owner ID: {0}", item.UnixOwnerId);
}
Tip: Comment
property and all DateTime
properties can also be used to update respective ZIP archive file metadata.
Extracting to anywhere
ZipItem
data can be accessed using many different ways:
// get instance of "/data/file1.txt" ZIP item
ZipItem item = zip["/data/file1.txt"];
// extract the file into a byte array
// (could cause OutOfMemoryException if the file was too long)
byte[] byteArrayFile = item.ExtractToArray();
// extract the file into a directory
item.ExtractToDirectory(@"C:\MyData\Out");
// extract the file to a different file name
item.ExtractToFile(@"C:\MyData\Out\archived.txt", ActionOnExistingFiles.OverwriteAll);
// extract the file to a stream
using (var writer = new StreamWriter(stream))
{
// write header
writer.WriteLine("Content of '{0}' follows:", item.Path);
writer.Flush();
// write data
item.ExtractToStream(writer.BaseStream);
}
Stream-based data access
To access decompressed data as a .NET Stream
, use the ZipItem.Open()
method.
This will provide a readable and non-seekable stream from which you can read the data.
// get instance of "/data/file1.txt" ZIP item
ZipItem item = zip["/data/file1.txt"];
// construct a stream reader from the ZIP item
// (suitable for text files; use a different approach for binary files)
using (var reader = new StreamReader(item.Open()))
{
// read all data
string content = reader.ReadToEnd();
// display the data
Console.WriteLine("Content of '{0}' follows:", item.Path);
Console.WriteLine(content);
}
Note: While the stream is open, the parent
ZipArchive
object is locked
and cannot be manipulated until the ZipItem
's stream is closed.
Back to feature list...