Đị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ể.

Tệp zip - Cấu trúc bên trong

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. 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-ZipWinRAR , cung cấp hỗ trợ riêng cho việc tạo và giải nén các tệp 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 thứ 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. Lý do phổ biến nhất để nén kho lưu trữ zip là gì?

Lý do phổ biến nhất để nén tệp Zip là để giảm kích thước tệp để lưu trữ, truyền và sắp xếp dữ liệu hiệu quả.

2. Tại sao zip được gọi là lưu trữ?

Zip được gọi là kho lưu trữ vì nó hoạt động như một chất kết dính kỹ thuật số, gói các tệp và thư mục khác nhau lại thành một thực thể nén duy nhất, giống như cách các kho lưu trữ vật lý lưu trữ và sắp xếp tài liệu. Chức năng lưu trữ này đơn giản hóa việc lưu trữ và truyền dữ liệu bằng cách giảm số lượng tệp riêng lẻ và không gian lưu trữ tổng thể cần thiết.

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.