Nén/giải nén với thư viện thuần C# SharpCompress

Trong bài viết này, mình sẽ giới thiệu thư viện SharpCompress dùng để nén/giải nén tập tin sử dụng trong C#. Các bạn có thể tham khảo trước về thư viện này theo link (http://sharpcompress.codeplex.com/) trước khi xem ví dụ của mình.

Các định dạng tập tin nén mà SharpCompress hỗ trợ các bạn xem ở đây: SharpCompress supported formats

Bây giờ mình sẽ thực hiện một ví dụ mẫu sử dụng thư viện này để thực hiện việc nén và giải nén. Trong bài viết này, mình tạo một ứng dụng ASP.NET MVC 4 dạng empty project, sau đó mình add vào HomeController và tạo Index view mặc định. Tiếp theo, mình sẽ add reference vào thư viện SharpCompress bằng cách thực hiện lệnh trong Package Manager Console

Install-Package sharpcompress

Khi đó, Visual sẽ tự động tải về dll của thư viện và thực hiện add reference cho bạn. Tiếp theo, mình tạo một thư mục tên là Demo và để vào đó một số file hình ảnh để làm ví dụ.

Image

Tiếp theo, mình sẽ viết hàm để thực hiện việc nén các tập tin hình ảnh trong thư mục Demo trên server vào trong một tập tin nén .zip.

private string path = System.Web.HttpContext.Current.Server.MapPath(@"~/Demo");

#region compress files

public string CompressFiles()
{
try
{
using (var archive = ZipArchive.Create())
{
// tên file sẽ lưu
string file = path + @"\compress.zip";
// lấy tất cả các định dạng tập tin có trong đường dẫn
string searchPattern = "*.*";
archive.AddAllFromDirectory(path, searchPattern, SearchOption.AllDirectories);
// lưu tập tin vào đường dẫn đã chỉ định
archive.SaveTo(file, CompressionType.Deflate);
}

return "Nén thành công!";
}
catch (Exception ex)
{
return "Nén không thành công!";
}
}

#endregion

Các bạn thực thi hàm này và xem kết quả trong thư mục Demo.

Tiếp theo, mình sẽ viết hàm để giải nén tập tin vừa nén lại vào trong cùng thư mục Demo, và để đảm bảo kết quả, các bạn xóa hết các tập tin hình ảnh trước khi được nén vào trong tập tin vừa tạo đi.

#region decompress file

public string DecompressFile()
{
try
{
// tên tập tin giải nén
string file = path + @"\compress.zip";

using (Stream stream = System.IO.File.OpenRead(file))
{
// mở file cần giải nén để đọc nội dung
var reader = ReaderFactory.Open(stream);

// tiến hành giải nén nội dung trong file nén
while(reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory)
{
// tiến hành giải nén, và ghi đè lên file nếu file đó đã tồn tại trong đường dẫn
reader.WriteEntryToDirectory(path, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite);
}
}
}

return "Giải nén thành công!";
}
catch (Exception ex)
{
return "Giải nén không thành công!";
}
}

#endregion

Bạn mở thư mục Demo ra và xem kết quả.

Qua ví dụ trên, bạn có thể thấy được tính tiện dụng và khả năng thực thi việc nén/giải nén nhanh chóng và hiệu quả mà thư viện thuần C# SharpCompress mang lại. Ngoài việc nén/ giải nén tập tin định dạng .zip, SharpCompress còn hỗ trợ thực hiện với các định dạng khác thông qua các hàm API của mình, chi tiết bạn xem tại đây (SharpCompress API). Chúc các bạn thành công.

Link ví dụ mẫu: Example

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s