
ZIP 檔案用於將一個或多個文件或文件夾壓縮並保存到一個容器中。 ZIP 存檔封裝了文件和文件夾,並保存了它們的元數據信息。歸檔最常見的用途是減小存儲或傳輸文件的大小,並應用加密以確保安全。除了文件壓縮工具之外,自動壓縮/提取功能還用於各種桌面和 Web 應用程序中,用於上傳、下載、共享或加密文件。本文還針對類似的場景,並介紹了一些使用 C# 以編程方式壓縮文件或文件夾以及創建 ZIP 存檔的簡單方法。
在本文中,您將了解如何執行以下 ZIP 歸檔操作:
C# ZIP 庫
Aspose.ZIP for .NET 是一個功能強大且易於使用的 API,用於在 .NET 應用程序中壓縮或解壓縮文件和文件夾。它還提供了 AES 加密技術來在 C# 中加密 ZIP 中的文件。您可以從 NuGet 安裝 API 或從 下載 部分下載其二進製文件。
在 C# 中創建 ZIP 存檔
以下是通過將文件添加到 ZIP 存檔來壓縮文件的步驟:
- 為輸出 ZIP 存檔創建一個 FileStream 對象。
- 將源文件打開到 FileStream 對像中。
- 創建一個 Archive 類的對象。
- 使用 Archive.CreateEntry(string, FileStream) 方法將文件添加到存檔中。
- 使用 Archive.Save(FileStream) 方法創建 ZIP 存檔。
以下代碼示例顯示瞭如何使用 C# 將文件添加到 ZIP 存檔中。
// 為輸出 ZIP 存檔創建 FileStream
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
// 要添加到存檔的文件
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings()))
{
// 將文件添加到存檔
archive.CreateEntry("alice29.txt", source1);
// 壓縮文件
archive.Save(zipFile);
}
}
}
在 C# 中將多個文件添加到 ZIP 存檔
如果您想將多個文件添加到一個 ZIP 存檔中,您可以使用以下方法之一來完成。
C# 使用 FileStream 壓縮多個文件
在此方法中,FileStream 類用於使用 Archive.CreateEntry(String, FileStream) 方法將文件添加到 ZIP 存檔。以下代碼示例顯示瞭如何在 C# 中將多個文件添加到 ZIP 中。
// 為輸出 ZIP 存檔創建 FileStream
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// 要添加到存檔的文件
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// 要添加到存檔的文件
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// 將文件添加到存檔
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// 壓縮文件
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
}
}
}
}
C# 使用 FileInfo 壓縮多個文件
您還可以使用 FileInfo 類將多個文件添加到 ZIP 存檔中。在此方法中,文件將使用 FileInfo 類加載,並使用 Archive.CreateEntry(String, FileInfo) 方法添加到 ZIP 存檔中。以下代碼示例顯示如何使用 C# 中的 FileInfo 類壓縮多個文件。
// 為輸出 ZIP 存檔創建 FileStream
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// 要添加到存檔的文件
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// 將文件添加到存檔
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// 創建 ZIP 存檔
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
使用路徑的 ZIP 文件
您可以直接向 Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings) 方法提供文件路徑,而不是對 ZIP 條目使用 FileInfo 或 FileStream 類。以下代碼示例顯示瞭如何使用文件路徑壓縮文件。
// 為輸出 ZIP 存檔創建 FileStream
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
// 創建存檔
using (var archive = new Archive())
{
// 將文件添加到 ZIP 存檔
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
在 C# 中將文件夾添加到 ZIP 存檔
您可以使用 C# ZIP 庫壓縮文件夾,這可能是將多個文件添加到 ZIP 存檔的另一種選擇。只需將源文件放入一個文件夾並將該文件夾添加到 ZIP 存檔中。以下是在 C# 中壓縮文件夾的步驟:
- 為輸出 ZIP 存檔創建 FileStream 類的對象。
- 創建 Archive 類的實例。
- 使用 DirectoryInfo 類指定要壓縮的文件夾。
- 使用 Archive.CreateEntries(DirectoryInfo) 方法將文件夾添加到 ZIP 中。
- 使用 Archive.Save(FileStream) 方法創建 ZIP 存檔。
以下代碼示例顯示瞭如何在 C# 中將文件夾添加到 ZIP。
// 為輸出 ZIP 存檔創建 FileStream
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive())
{
// 要壓縮的文件夾
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// 創建 ZIP 存檔
archive.Save(zipFile);
}
}
在 C# 中使用 ZipCrypto 創建一個密碼保護的 ZIP
您可以使用密碼保護 ZIP 檔案並應用 ZipCrypto 加密。為此,ArchiveEntrySettings 類用於接受加密類型作為第二個參數的 Archive 的構造函數。
以下代碼示例顯示如何在 C# 中使用 ZipCrypto 創建受密碼保護的 ZIP 存檔。
// 為輸出 ZIP 存檔創建 FileStream
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
{
// 將文件夾添加到存檔
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// 創建 ZIP 存檔
archive.Save(zipFile);
}
}
C# 使用 AES 加密創建密碼保護的 ZIP
Aspose.ZIP for .NET 還允許您應用 AES 加密來保護 ZIP 檔案。您可以使用以下 AES 加密方法:
- AES128
- AES192
- AES256
為了應用 AES 加密,API 提供了 AesEcryptionSettings 類。以下代碼示例展示瞭如何在 C# 中使用 AES 加密創建受密碼保護的 ZIP。
// 為輸出 ZIP 存檔創建 FileStream
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
{
// 將文件夾添加到存檔
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// 創建 ZIP 存檔
archive.Save(zipFile);
}
}
設置並行壓縮模式
如果有多個條目,您還可以配置 API 以進行並行壓縮。為此,您可以使用 ParallelOptions 類指定並行壓縮模式。 Aspose.ZIP for .NET 提供以下並行壓縮模式。
- 從不 - 不要並行壓縮。
- 始終 - 並行壓縮(注意內存不足)。
- 自動 - 決定是否對條目使用並行壓縮。此選項可能僅並行壓縮某些條目。
下面的代碼示例展示瞭如何在使用 Aspose 的 C# ZIP 庫壓縮多個文件時設置並行壓縮模式。
// 如需完整示例和數據文件,請訪問 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);
//定義並行度標準
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"
});
}
}
}
}
了解有關 C# .NET ZIP 庫的更多信息
使用以下資源進一步了解我們的 C# ZIP API:
在線製作 ZIP 檔案
您也可以嘗試我們的免費在線應用程序,它基於 Aspose.ZIP for .NET,用於將文件壓縮為 ZIP 存檔。
結論
在本文中,您了解瞭如何在 C# 中以編程方式創建 ZIP 存檔。代碼示例演示瞭如何在 ZIP 存檔中添加文件和文件夾。此外,我們還介紹瞭如何使用 C# Aspose 的 ZIP 庫使用 ZipCrypto 和 AES 加密方法創建受密碼保護的 ZIP 存檔。此外,最後還討論了多個條目的並行壓縮。如果您有任何問題或疑問,可以通過我們的 論壇 詢問我們。