Định dạng lưu trữ ZIP
Trong thời đại kỹ thuật số, nơi dữ liệu là vua và hiệu quả lưu trữ là tối quan trọng, kho lưu trữ ZIP vẫn là giải pháp ổn định và phổ biến để nén và sắp xếp tệp.
Giới thiệu về thông tin lưu trữ Zip
ZIP là một định dạng lưu trữ có thể chứa một hoặc nhiều tệp và thư mục nén không mất dữ liệu, có hoặc không có mã hóa. ZIP là định dạng phổ biến nhất được biết đến trong hơn ba mươi năm và được hỗ trợ trên hầu hết mọi hệ điều hành hiện đại. Định dạng này cũng được mở rộng sang một số định dạng khác như JAR và OpenDocument.
Thông tin lịch sử định dạng tệp lưu trữ zip
Đặc tả định dạng đầu tiên của ZIP được xuất bản vào năm 1989. Tác giả của ý tưởng ZIP là Phil Katz và Gary Conway. Đó là một thành công ngay lập tức do hiệu quả của nó trong việc giảm kích thước tệp, giúp lưu trữ và truyền tệp dễ dàng hơn qua kết nối internet chậm và dung lượng lưu trữ hạn chế ở thời đó. Từ năm 1993, nó hỗ trợ phương pháp nén Deflate phổ biến nhất. Mã hóa AES mạnh được giới thiệu vào năm 2003. Mặc dù đã khá cũ nhưng tiêu chuẩn này vẫn chưa trở thành lỗi thời - đang được phát triển tích cực ngày nay. Vì vậy, vào năm 2020, nó đã được mở rộng với các phương pháp nén Zstandard, MP3 và Xperia.
Cấu trúc của kho lưu trữ ZIP
Các kho lưu trữ ZIP được thiết kế theo cấu trúc phân cấp này để lưu trữ và sắp xếp các tệp nén một cách hiệu quả đồng thời cho phép truy cập dễ dàng vào các tệp riêng lẻ trong kho lưu trữ. Mỗi mục của kho lưu trữ được nén riêng biệt, thậm chí có thể có phương pháp nén và mã hóa riêng. Mục nhập bên trong kho lưu trữ có tiêu đề trước với siêu dữ liệu tệp gốc. Mục lục nằm ở cuối tập tin. Cách tiếp cận như vậy cho phép soạn thảo kho lưu trữ tự giải nén (SFX), kho lưu trữ này cũng vẫn là kho lưu trữ ZIP hợp lệ do phần thực thi nằm ở phần đầu của tệp SFX.
Phương pháp nén Zip
ZIP hiện đại cho phép nén dữ liệu bằng các thuật toán Deflate, Deflate64™, BZIP2, LZMA, Hz, PPMd, Zstandard. Tập tin cũng có thể được lưu trữ mà không cần nén. Phổ biến nhất là Deflate, được mặc định trong bất kỳ công cụ lưu trữ nào. Ngoài ra còn có các thuật toán nén không mất dữ liệu của các tệp cụ thể: MP3, JPEG, WAV. Aspose.ZIP hỗ trợ đầy đủ các phương pháp Deflate, Deflate64™, Bzip2, LZMA, Hz, PPMd và Zstandard. Nó cho phép trích xuất âm thanh nén WavPack.
Hoạt động hỗ trợ lưu trữ Zip
Sử dụng Aspose.ZIP, bạn có thể xử lý kho lưu trữ ZIP theo nhiều cách khác nhau. Bạn có thể soạn kho lưu trữ, thêm các mục vào kho lưu trữ hiện có mà không cần đóng gói lại, xóa các mục khỏi kho lưu trữ hiện có mà không ảnh hưởng đến phần còn lại của kho lưu trữ và trích xuất mục nhập tùy ý hoặc toàn bộ kho lưu trữ. Bạn có thể mã hóa và giải mã từng mục riêng biệt bằng thuật toán mã hóa AES cũ hoặc hiện đại. Aspose.ZIP có thể tạo các kho lưu trữ ZIP tự giải nén và nhiều tập.
Tệp Zip - Cấu trúc bên trong
Như đã nói, thư mục trung tâm, là mục lục, nằm ở cuối kho lưu trữ ZIP. Thư mục này hoạt động như một chỉ mục, liệt kê tất cả các mục nhập tệp trong kho lưu trữ cùng với vị trí của chúng trong kho lưu trữ. Tiêu đề mục nhập có thể bao gồm thời gian tạo và sửa đổi, thuộc tính hệ thống tệp, tên tệp và nhận xét. Tiêu đề mục nhập có thể được mở rộng với trường bổ sung tùy chỉnh để lưu trữ siêu dữ liệu tùy chỉnh. Có thể bao gồm các tiêu đề Zip64 để hỗ trợ hơn 65.535 mục trên mỗi kho lưu trữ. Kích thước tối đa của kho lưu trữ ZIP có phần mở rộng Zip64 là 264−1 byte. Kho lưu trữ ZIP có thể được chia thành nhiều tệp. Trong trường hợp đó, thư mục trung tâm lưu trữ giá trị offset của từng ổ để truy cập nhanh vào mục cụ thể.
Mức độ phổ biến của Lưu trữ và Hỗ trợ Zip
ZIP là định dạng lưu trữ số một. Các kho lưu trữ ZIP được công nhận và hỗ trợ rộng rãi đến mức nhiều ứng dụng phần mềm khác nhau, bao gồm các trình quản lý tệp phổ biến như Windows Explorer, macOS Finder và các công cụ nguồn mở như 7-Zip và WinRAR , cung cấp hỗ trợ riêng cho tạo và giải nén các tập tin ZIP. Hỗ trợ này mở rộng sang các dịch vụ lưu trữ đám mây, ứng dụng email và thậm chí cả thiết bị di động.
Ví dụ về việc sử dụng tệp Zip
Kho lưu trữ Zip là định dạng tệp phổ biến để nén và sắp xếp dữ liệu, khiến chúng trở nên cần thiết trong các ứng dụng phần mềm khác nhau. Hoạt động với các kho lưu trữ thông qua .NET cho phép các nhà phát triển làm việc với các tệp Zip một cách dễ dàng. Trong các ví dụ về mã sau đây, chúng ta sẽ đi sâu vào các khả năng hoạt động với kho lưu trữ Zip, trình bày cách tạo kho lưu trữ Zip mới và trích xuất các tệp một cách hiệu quả từ những cái hiện có. Những ví dụ này sẽ giúp bạn khai thác khả năng của thư viện này để quản lý các kho lưu trữ Zip một cách liền mạch trong các dự án .NET của bạn
Create Zip file via .NET
Compose ZIP archive with two entries added by their paths.:
using (var archive = new Archive())
{
archive.CreateEntry("entry_name1.dat", "input_file1.dat");
archive.CreateEntry("entry_name2.dat", "input_file2.dat");
archive.Save("result_archive.zip");
}
How to UnZIP files in C#
Steps: Unzip File to Folder in C#
- Create an instance of Archive class based on your zip file.
- Unzip the zip file using Archive.ExtractToDirectory method to your folder.
using (var archive = new Archive("input_archive.zip"))
{
archive.ExtractToDirectory("outputDirectory");
}
Compressing Single File ZIP File
Steps: Compressing Single File in C#
- Create a file stream with the desired name of your output zip file.
- Create file stream of the data file to be compressed and encrypted.
- Create an instance of Archive class and pass to it an instance of ArchiveEntrySettings class with AesEcryptionSettings instance, specifying the password.
- Add data file created in step 2 using Archive.CreateEntry method.
- Compress and encrypt the data file using Archive.Save method and pass it the file stream created in step 1.
using (var zipFile = File.Open("EncrypedWithAES256.zip", FileMode.Create))
{
using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
{
archive.CreateEntry("alice29.txt", source);
archive.Save(zipFile);
}
}
}
Deleting entries from existing archive
You do not have to repack whole archive when you only need to remove one entry from it. Steps:
- Create a file stream with the desired name of your output zip file.
- Create an instance of Archive class based on your zip file.
- Delete the first file - the entry with zero index – from the archive.
- Save the archive without excluded entry to output stream from step 1
using (FileStream outputZipFile = File.Open(“withoutAnEntry.zip”, FileMode.Create))
{
using (Archive archive = new Archive(“archive.zip”))
{
archive.DeleteEntry(archive.Entries[0]);
archive.Save(outputZipFile);
}
}
Thông tin bổ sung về kho lưu trữ Zip
Mọi người đã hỏi
1. Tôi nên chọn phương pháp mã hóa nào?
Định dạng ZIP hỗ trợ các kỹ thuật mã hóa AES truyền thống (ZipCrypto) và hiện đại. Cái trước yếu hơn cái sau và dễ bị phá vỡ; ZipCrypto được Aspose.ZIP hỗ trợ cho tính kế thừa. Vui lòng chỉ sử dụng mã hóa AES256 khi soạn bản lưu trữ.
2. Có cách nào tận dụng bộ xử lý đa lõi để nén không?
Aspose.ZIP cho phép bạn soạn các mục lưu trữ ZIP theo các lõi CPU khác nhau. Điều này có thể làm giảm đáng kể tổng thời gian nén. Xem một bài viết với phần giải thích và mẫu cách sử dụng.
3. Virus có thể lây nhiễm zip không?
Có, vi-rút có thể lây nhiễm các tệp trong kho lưu trữ Zip nếu bản thân các tệp đó bị nhiễm. Mặc dù bản thân định dạng Zip không có hại nhưng nó có thể lưu trữ và vận chuyển các tệp bị nhiễm, giống như bất kỳ định dạng tệp nào khác.