با اضافه شده فضای نام System.IO.Compression در NET 4.5. دیگر بدون نیاز به کتابخانههای همچون
DotNetZip به راحتی میتوانید فایلهای خود را فشرده یا باز کنید.
کلاس ZipFile
این کلاس امکان فشرده یا باز نمون فایل یا یک پوشه را در اختیارمان قرار میدهد. مثلا برای فشرده سازی یک پوشه از کد زیر استفاده مینمایید
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(startPath, zipPath);
برای بار نمون یک فایل فشرده هم از تابع ExtractToDirectory استفاده نمایید
string extractPath = @"c:\example\extract";
ZipFile.ExtractToDirectory(zipPath, extractPath);
کلاس ZipArchive
کلاس ZipFile و ZipArchive مکمل هم دیگر هستند و اکثرا با هم دیگر کاربرد دارد اما این کلاس برای دستکاری فایل Zip استفاده میشود مثلا برای ایجاد یک فایل zip و کنترل بیشتر بر روی آن در مثال زیر یک ابتدا یک فایل خالی ایجاد کرده ایم و با تابع CreateEntityFromFile فایلهای مورد را با مسیر و نام آن و حتی کیفیت فشردگی به آن اضافه نموده اید.
using (ZipArchive zipFile = ZipFile.Open(zipName, ZipArchiveMode.Create))
{
zipFile.CreateEntryFromFile(@"C:\Temp\File1.txt", "File1.txt");
zipFile.CreateEntryFromFile(@"C:\Temp\File2.txt", "File2.txt", CompressionLevel.Fastest);
}
اما اگر بخواهیم فایل Zip را در یک MemoryStream ایجاد کنیم کافیست از کد زیر استفاده نمایید
using (MemoryStream zipStream = new MemoryStream())
{
using (ZipArchive zipFile = new ZipArchive(zipStream, ZipArchiveMode.Create))
{
zipFile.CreateEntryFromFile(filepath, filename);
}
}
حال میخواهیم یک فایل Zip را باز کنیم. کلاس ZipArchiveEntry برای دسترسی به فایلهای موجود در فایل Zip میباشد.
using (ZipArchive archive = ZipFile.OpenRead(zipName))
{
foreach (ZipArchiveEntry file in archive.Entries)
{
Console.WriteLine("File Name: {0}", file.Name);
Console.WriteLine("File Size: {0} bytes", file.Length);
Console.WriteLine("Compression Ratio: {0}", ((double)file.CompressedLength / file.Length).ToString("0.0%"));
file.ExtractToFile(directorypath);
}
}