Lưu trữ ZIP được sử dụng để nén và giữ một hoặc nhiều tệp hoặc thư mục vào một vùng chứa. Kho lưu trữ ZIP đóng gói các tệp và thư mục cũng như giữ thông tin siêu dữ liệu của chúng. Cách sử dụng lưu trữ phổ biến nhất là giảm kích thước tệp để lưu trữ hoặc truyền và áp dụng mã hóa để bảo mật. Ngoài các công cụ nén tệp, các tính năng nén/trích xuất tự động cũng được sử dụng trong các ứng dụng web và máy tính để bàn khác nhau để tải lên, tải xuống, chia sẻ hoặc mã hóa tệp. Bài viết này cũng nhắm đến các tình huống tương tự và trình bày một số cách dễ dàng để nén tệp hoặc thư mục và tạo tệp lưu trữ ZIP theo chương trình bằng C#.
Trong bài viết này, bạn sẽ học cách thực hiện các thao tác lưu trữ ZIP sau:
- Tạo kho lưu trữ ZIP bằng C#
- Thêm nhiều tệp vào kho lưu trữ ZIP
- Thêm thư mục vào kho lưu trữ ZIP
- Tạo một kho lưu trữ ZIP được bảo vệ bằng mật khẩu bằng ZipCrypto
- Mã hóa kho lưu trữ ZIP bằng mã hóa AES
- Đặt chế độ nén song song
Thư viện C# ZIP
Aspose.ZIP cho .NET là một API mạnh mẽ và dễ sử dụng để nén hoặc giải nén các tệp và thư mục trong các ứng dụng .NET. Nó cũng cung cấp các kỹ thuật mã hóa AES để mã hóa các tệp trong ZIP trong C#. Bạn có thể cài đặt API từ NuGet hoặc tải xuống các tệp nhị phân của nó từ phần Tải xuống.
Tạo Lưu trữ ZIP trong C#
Sau đây là các bước để nén tệp bằng cách thêm tệp đó vào kho lưu trữ ZIP:
- Tạo một đối tượng FileStream cho kho lưu trữ ZIP đầu ra.
- Mở tệp nguồn vào một đối tượng FileStream.
- Tạo một đối tượng của lớp Archive.
- Thêm tệp vào kho lưu trữ bằng phương pháp Archive.CreateEntry(string, FileStream).
- Tạo kho lưu trữ ZIP bằng phương pháp Archive.Save(FileStream).
Mẫu mã sau đây cho biết cách thêm tệp vào kho lưu trữ ZIP bằng C#.
// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
// Tệp sẽ được thêm vào kho lưu trữ
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings()))
{
// Thêm tệp vào kho lưu trữ
archive.CreateEntry("alice29.txt", source1);
// tệp ZIP
archive.Save(zipFile);
}
}
}
Thêm nhiều tệp vào Lưu trữ ZIP trong C#
Trong trường hợp bạn muốn thêm nhiều tệp vào kho lưu trữ ZIP, bạn có thể thực hiện bằng một trong các cách sau.
C# ZIP Nhiều tệp bằng FileStream
Trong phương thức này, lớp FileStream được sử dụng để thêm tệp vào kho lưu trữ ZIP bằng phương thức Archive.CreateEntry(String, FileStream). Mẫu mã sau đây cho biết cách thêm nhiều tệp vào một tệp ZIP trong C#.
// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Tệp sẽ được thêm vào kho lưu trữ
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// Tệp sẽ được thêm vào kho lưu trữ
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// Thêm tệp vào kho lưu trữ
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// ZIP các tập tin
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
}
}
}
}
C# ZIP Nhiều tệp bằng FileInfo
Bạn cũng có thể sử dụng lớp FileInfo để thêm nhiều tệp vào kho lưu trữ ZIP. Trong phương thức này, các tệp sẽ được tải bằng lớp FileInfo và được thêm vào kho lưu trữ ZIP bằng phương thức Archive.CreateEntry(String, FileInfo). Mẫu mã sau đây cho biết cách ZIP nhiều tệp bằng lớp FileInfo trong C#.
// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// Tệp sẽ được thêm vào kho lưu trữ
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// Thêm tệp vào kho lưu trữ
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// Tạo kho lưu trữ ZIP
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
Tệp ZIP sử dụng Đường dẫn
Thay vì sử dụng các lớp FileInfo hoặc FileStream cho các mục nhập ZIP, bạn có thể cung cấp trực tiếp đường dẫn của tệp cho phương thức Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings). Mẫu mã sau đây cho biết cách ZIP các tệp bằng đường dẫn của chúng.
// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
// Tạo kho lưu trữ
using (var archive = new Archive())
{
// Thêm tệp vào kho lưu trữ ZIP
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
Thêm thư mục vào Lưu trữ ZIP trong C#
Bạn có thể ZIP một thư mục bằng thư viện C# ZIP, đây có thể là một giải pháp thay thế khác cho việc thêm nhiều tệp vào kho lưu trữ ZIP. Chỉ cần đặt các tệp nguồn vào một thư mục và thêm thư mục đó vào kho lưu trữ ZIP. Sau đây là các bước để ZIP một thư mục trong C#:
- Tạo một đối tượng thuộc lớp FileStream cho tệp lưu trữ ZIP đầu ra.
- Tạo một thể hiện của lớp Archive.
- Sử dụng lớp DirectoryInfo để chỉ định thư mục sẽ được nén.
- Sử dụng phương pháp Archive.CreateEntries(DirectoryInfo) để thêm thư mục vào ZIP.
- Tạo kho lưu trữ ZIP bằng phương pháp Archive.Save(FileStream).
Mẫu mã sau đây cho biết cách thêm thư mục vào ZIP trong C#.
// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive())
{
// Thư mục được nén
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Tạo kho lưu trữ ZIP
archive.Save(zipFile);
}
}
Tạo ZIP được bảo vệ bằng mật khẩu bằng ZipCrypto trong C#
Bạn có thể bảo vệ kho lưu trữ ZIP bằng mật khẩu và áp dụng mã hóa ZipCrypto. Đối với điều này, lớp ArchiveEntrySettings được sử dụng trong hàm tạo của Archive chấp nhận loại mã hóa làm tham số thứ hai.
Mẫu mã sau đây cho biết cách tạo kho lưu trữ ZIP được bảo vệ bằng mật khẩu bằng ZipCrypto trong C#.
// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
{
// Thêm thư mục vào kho lưu trữ
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Tạo kho lưu trữ ZIP
archive.Save(zipFile);
}
}
C# Tạo ZIP được bảo vệ bằng mật khẩu bằng Mã hóa AES
Aspose.ZIP cho .NET cũng cho phép bạn áp dụng mã hóa AES để bảo vệ kho lưu trữ ZIP. Bạn có thể sử dụng các phương thức mã hóa AES sau:
- AES128
- AES192
- AES256
Để áp dụng mã hóa AES, API cung cấp lớp AesEcryptionSettings. Mẫu mã sau đây cho biết cách tạo ZIP được bảo vệ bằng mật khẩu bằng mã hóa AES trong C#.
// Tạo FileStream cho kho lưu trữ ZIP đầu ra
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
{
// Thêm thư mục để lưu trữ
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// Tạo kho lưu trữ ZIP
archive.Save(zipFile);
}
}
Đặt chế độ nén song song
Bạn cũng có thể định cấu hình API để nén song song trong trường hợp có nhiều mục nhập. Đối với điều này, bạn có thể chỉ định chế độ nén song song bằng lớp ParallelOptions. Aspose.ZIP cho .NET cung cấp các chế độ nén song song sau đây.
- Không bao giờ - Không nén song song.
- Luôn luôn - Thực hiện nén song song (coi chừng hết bộ nhớ).
- Tự động - Quyết định có sử dụng tính năng nén song song hay không dựa trên các mục nhập. Tùy chọn này chỉ có thể nén một số mục nhập song song.
Mẫu mã sau đây cho biết cách đặt chế độ nén song song trong khi nén nhiều tệp bằng thư viện C# ZIP của Aspose.
// Để biết các ví dụ đầy đủ và tệp dữ liệu, vui lòng truy cập https://github.com/aspose-zip/Aspose.ZIP-for-.NET
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
{
using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2);
//Xác định tiêu chí song song
var parallelOptions = new ParallelOptions
{
ParallelCompressInMemory = ParallelCompressionMode.Always
};
archive.Save(zipFile,
new ArchiveSaveOptions()
{
ParallelOptions = parallelOptions,
Encoding = Encoding.ASCII,
ArchiveComment = "There are two poems from Canterbury corpus"
});
}
}
}
}
Tìm hiểu thêm về Thư viện C# .NET ZIP
Khám phá thêm về C# ZIP API của chúng tôi bằng các tài nguyên sau:
Tạo kho lưu trữ ZIP trực tuyến
Bạn cũng có thể dùng thử ứng dụng trực tuyến miễn phí của chúng tôi, dựa trên Aspose.ZIP cho .NET, để nén các tệp vào kho lưu trữ ZIP.
Sự kết luận
Trong bài viết này, bạn đã học cách tạo các kho lưu trữ ZIP theo chương trình trong C#. Các mẫu mã đã minh họa cách thêm tệp và thư mục vào kho lưu trữ ZIP. Ngoài ra, chúng tôi cũng đã giới thiệu cách tạo các kho lưu trữ ZIP được bảo vệ bằng mật khẩu bằng các phương pháp mã hóa ZipCrypto và AES bằng thư viện ZIP của C# Aspose. Bên cạnh đó, việc nén song song nhiều mục nhập cũng được thảo luận ở phần cuối. Trong trường hợp bạn có bất kỳ câu hỏi hoặc thắc mắc nào, bạn có thể hỏi chúng tôi qua diễn đàn của chúng tôi.