C#使用Windows自带功能将文件夹打包为ZIP
在 C# 中,可以使用内置的 System.IO.Compression 命名空间轻松地将整个文件夹打包为 ZIP 文件。最直接的方法是使用 ZipFile.CreateFromDirectory 方法。
基本用法
using System.IO.Compression; string sourceFolder = @"C:\SourceFolder"; // 要压缩的文件夹 string zipFile = @"C:\Archive.zip"; // 生成的 ZIP 文件路径 ZipFile.CreateFromDirectory(sourceFolder, zipFile);
该方法会将 sourceFolder 中的所有文件和子文件夹递归地添加到 ZIP 文件中。
高级选项
CreateFromDirectory 有多个重载,允许你控制压缩行为:
// 带 CompressionLevel 和 includeBaseDirectory 参数的重载
ZipFile.CreateFromDirectory(
sourceFolder,
zipFile,
CompressionLevel.Optimal, // 压缩级别(Optimal, Fastest, NoCompression)
true // 是否在 ZIP 中包含源目录本身作为根目录
);
includeBaseDirectory:如果为true,则 ZIP 文件中会包含源文件夹本身作为根目录(即解压后会出现一个与源文件夹同名的文件夹);如果为false,则源文件夹下的所有内容直接位于 ZIP 根目录。- 还可以使用
EntryNameEncoding参数指定文件名编码,或通过Overwrite参数控制是否覆盖已存在的 ZIP 文件(在 .NET 6+ 中)。
异常处理
注意捕获可能的异常,例如:
DirectoryNotFoundException:源文件夹不存在。IOException:目标 ZIP 文件已存在且被占用等。UnauthorizedAccessException:无权限访问文件。
添加对命名空间的引用
- .NET Framework 4.5+:需要添加对
System.IO.Compression.FileSystem的程序集引用。 - .NET Core / .NET 5+:直接使用
System.IO.Compression命名空间即可(通常已默认包含)。
完整示例
using System;
using System.IO;
using System.IO.Compression;
class Program
{
static void Main()
{
string folderPath = @"C:\MyFolder";
string zipPath = @"C:\MyFolder.zip";
try
{
// 检查源文件夹是否存在
if (!Directory.Exists(folderPath))
{
Console.WriteLine("源文件夹不存在。");
return;
}
// 如果目标 ZIP 文件已存在,可选择删除或覆盖
if (File.Exists(zipPath))
{
File.Delete(zipPath); // 或者使用 Overwrite 参数(.NET 6+)
}
// 创建 ZIP 文件,不包含基目录
ZipFile.CreateFromDirectory(folderPath, zipPath, CompressionLevel.Optimal, false);
Console.WriteLine($"文件夹已成功打包为:{zipPath}");
}
catch (Exception ex)
{
Console.WriteLine($"出错:{ex.Message}");
}
}
}
其他注意事项
- 如果需要在压缩过程中过滤文件、处理大文件或显示进度,建议使用第三方库,如 SharpCompress 或 DotNetZip(注意许可证)。
- 在 ASP.NET 应用中,可能需要使用异步方式,可以考虑将
CreateFromDirectory包装在Task.Run中,或使用 .NET 6+ 提供的异步版本(如ZipFile.CreateFromDirectoryAsync)。
使用内置的 ZipFile 类足以满足大多数简单到中等复杂度的文件夹打包需求。
到此这篇关于C#使用Windows自带功能将文件夹打包为ZIP的文章就介绍到这了,更多相关C# Windows将文件夹打包为ZIP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
C#中的高性能内存操作的利器:Span<T>和Memory<T>
在.NET开发中,内存管理一直是影响性能的关键因素,.NET Core 2.1引入Span和Memory优化内存管理,减少分配与复制开销,Span栈分配、无GC压力,适用于同步高性能场景;Memory堆分配、支持异步操作,适合跨方法传递与长期存储,合理选择可提升代码效率与可靠性2025-08-08
C#实现目录跳转(TreeView和SplitContainer)的示例代码
本文主要介绍了C#实现目录跳转(TreeView和SplitContainer)的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2022-07-07
C#手动操作DataGridView使用各种数据源填充表格实例
本文主要介绍了C#手动操作DataGridView使用各种数据源填充表格实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-02-02


最新评论