file-type

C#实现压缩文件功能的示例教程

ZIP文件

2星 | 下载需积分: 10 | 499KB | 更新于2025-07-06 | 40 浏览量 | 31 下载量 举报 收藏
download 立即下载
在C#中,压缩文件是一个常见的需求,尤其是在处理需要打包发送或者存储的文件时。本文将详细介绍如何使用C#来创建一个压缩文件的例子,以及如何对压缩文件进行解压。 ### 1. 使用System.IO.Compression命名空间 在.NET Framework和.NET Core中,可以通过`System.IO.Compression`命名空间下的`ZipArchive`类来创建和读取ZIP文件。首先需要在项目中添加对`System.IO.Compression`的引用。 #### 创建ZIP压缩文件 要创建一个ZIP文件,可以使用`System.IO.Compression.ZipFile`类中的静态方法`CreateFromDirectory`,该方法能够将一个目录压缩为ZIP格式。示例如下: ```csharp using System.IO; using System.IO.Compression; public void CreateZip(string sourceDirectoryPath, string destinationZipPath) { ZipFile.CreateFromDirectory(sourceDirectoryPath, destinationZipPath); } ``` 在上述代码中,`sourceDirectoryPath`参数代表了需要压缩的文件夹路径,而`destinationZipPath`参数则是压缩后ZIP文件的存储路径。 #### 读取和解压ZIP文件 要读取或者解压ZIP文件,可以使用`ZipArchive`类。以下示例代码展示了如何读取ZIP文件中的内容: ```csharp using System.IO; using System.IO.Compression; using System.Collections.Generic; public class ZipFileProcessor { public static void ExtractAll(string zipFilePath, string destinationPath) { using (ZipArchive archive = ZipFile.OpenRead(zipFilePath)) { foreach (ZipArchiveEntry entry in archive.Entries) { string filePath = Path.Combine(destinationPath, entry.FullName); if (string.IsNullOrWhiteSpace(entry.Name)) // 跳过目录条目 { Directory.CreateDirectory(filePath); } else { // 如果目标路径不存在,则创建所有必需的目录 Directory.CreateDirectory(Path.GetDirectoryName(filePath)); entry.ExtractToFile(filePath, overwrite: true); } } } } } ``` 在上述代码中,`zipFilePath`是ZIP文件的路径,而`destinationPath`是解压后文件存放的目标路径。 ### 2. 使用第三方库 虽然.NET自带的库可以满足基本的压缩和解压需求,但第三方库如SharpZipLib、DotNetZip等提供了额外的功能和更好的性能。使用第三方库前,需要通过NuGet包管理器安装对应库。 以DotNetZip为例,安装后可以通过以下方式使用: #### 创建ZIP文件 ```csharp using Ionic.Zip; public void CreateZipUsingDotNetZip(string sourceDirectory, string zipFilePath) { using (ZipFile zip = new ZipFile()) { zip.AddDirectory(sourceDirectory); zip.Save(zipFilePath); } } ``` #### 解压ZIP文件 ```csharp using Ionic.Zip; public void ExtractZipUsingDotNetZip(string zipFilePath, string destinationPath) { using (ZipFile zip = ZipFile.Read(zipFilePath)) { zip.ExtractAll(destinationPath, ExtractExistingFileAction.OverwriteSilently); } } ``` ### 3. 处理文件名列表 假设有一个文件名列表,例如给定的压缩包子文件的文件名称列表为`SrcSamples`,这可能代表着需要压缩的文件或文件夹的集合。这些文件名在实际应用中可以是来自文件系统,用户输入,或者其他数据源。 ```csharp // 假设SrcSamples是一个包含了所有需要添加到ZIP文件中的文件或文件夹路径的字符串数组 string[] SrcSamples = new string[] { "file1.txt", "folder1/", "file2.txt" }; // 使用System.IO.Compression进行压缩 public void CreateZipFromList(string[] fileNames, string destinationZipPath) { using (FileStream zipToOpen = new FileStream(destinationZipPath, FileMode.Create)) { using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create)) { foreach (var fileName in fileNames) { // 添加文件到ZIP文件中 archive.CreateEntryFromFile(fileName, Path.GetFileName(fileName)); } } } } ``` ### 结论 通过本文的介绍,我们了解了如何使用.NET自带的`System.IO.Compression`命名空间中的`ZipArchive`类来实现文件的压缩和解压,以及如何使用第三方库来处理更复杂的压缩任务。此外,还演示了如何处理一个文件名列表来创建ZIP文件。压缩和解压是文件操作中极为重要的一环,掌握这些技能对于开发各种类型的应用程序都十分有用。

相关推荐