在 C# 中創建 ZIP

ZIP 檔案用於將一個或多個文件或文件夾壓縮並保存到一個容器中。 ZIP 存檔封裝了文件和文件夾,並保存了它們的元數據信息。歸檔最常見的用途是減小存儲或傳輸文件的大小,並應用加密以確保安全。除了文件壓縮工具之外,自動壓縮/提取功能還用於各種桌面和 Web 應用程序中,用於上傳、下載、共享或加密文件。本文還針對類似的場景,並介紹了一些使用 C# 以編程方式壓縮文件或文件夾以及創建 ZIP 存檔的簡單方法。

在本文中,您將了解如何執行以下 ZIP 歸檔操作:

C# ZIP 庫

Aspose.ZIP for .NET 是一個功能強大且易於使用的 API,用於在 .NET 應用程序中壓縮或解壓縮文件和文件夾。它還提供了 AES 加密技術來在 C# 中加密 ZIP 中的文件。您可以從 NuGet 安裝 API 或從 下載 部分下載其二進製文件。

在 C# 中創建 ZIP 存檔

以下是通過將文件添加到 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# 中壓縮文件夾的步驟:

以下代碼示例顯示瞭如何在 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 存檔。此外,最後還討論了多個條目的並行壓縮。如果您有任何問題或疑問,可以通過我們的 論壇 詢問我們。

也可以看看

使用 C# 解壓縮或提取文件使用 C# 解壓縮 ZIP 存檔中的文件在 C# .NET 中創建 7z (7-Zip) 檔案
[在 C# .NET 中打開或提取 7z (7zip) 文件](https://blog.aspose.com/zh-hant/zip/open-extract-7zip-7z-file-unzip-in-csharp-asp-net /)使用 C# 創建和提取 GZip 檔案在 C# 中將 RAR 文件轉換為 ZIP 存檔
在 C# 中將 ZIP 存檔轉換為 TAR在 C# 中創建平面 ZIP 存檔在 C# 中創建可執行的自解壓存檔
在 C# 中創建 TAR.GZ 和 TAR.XZ 文件在 C# 中刪除 ZIP 存檔中的文件在 C# 中提取嵌套的 ZIP 檔案
在 C# 中合併多個 ZIP 或 TAR 檔案