C#使用Windows自带功能将文件夹打包为ZIP

 更新时间:2026年02月25日 09:02:28   作者:Never_Satisfied  
文章介绍了如何在C#中使用System.IO.Compression命名空间将文件夹打包为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}");
        }
    }
}

其他注意事项

  • 如果需要在压缩过程中过滤文件、处理大文件或显示进度,建议使用第三方库,如 SharpCompressDotNetZip(注意许可证)。
  • 在 ASP.NET 应用中,可能需要使用异步方式,可以考虑将 CreateFromDirectory 包装在 Task.Run 中,或使用 .NET 6+ 提供的异步版本(如 ZipFile.CreateFromDirectoryAsync)。

使用内置的 ZipFile 类足以满足大多数简单到中等复杂度的文件夹打包需求。

到此这篇关于C#使用Windows自带功能将文件夹打包为ZIP的文章就介绍到这了,更多相关C# Windows将文件夹打包为ZIP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# Datatable筛选过滤的四种方法实现

    C# Datatable筛选过滤的四种方法实现

    本文主要介绍了C# Datatable筛选过滤的四种方法实现,包括Select、LINQ、DataView、动态条件,各方法在排序、性能及适用场景上有不同特点,感兴趣的可以了解一下
    2025-06-06
  • C#中的高性能内存操作的利器:Span<T>和Memory<T>

    C#中的高性能内存操作的利器:Span<T>和Memory<T>

    在.NET开发中,内存管理一直是影响性能的关键因素,.NET Core 2.1引入Span和Memory优化内存管理,减少分配与复制开销,Span栈分配、无GC压力,适用于同步高性能场景;Memory堆分配、支持异步操作,适合跨方法传递与长期存储,合理选择可提升代码效率与可靠性
    2025-08-08
  • C#实现目录跳转(TreeView和SplitContainer)的示例代码

    C#实现目录跳转(TreeView和SplitContainer)的示例代码

    本文主要介绍了C#实现目录跳转(TreeView和SplitContainer)的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C#不重复输出一个数组中所有元素的方法

    C#不重复输出一个数组中所有元素的方法

    这篇文章主要介绍了C#不重复输出一个数组中所有元素的方法,涉及C#针对数组的遍历、校验及排序等操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#调用SQLite的方法实例分析

    C#调用SQLite的方法实例分析

    这篇文章主要介绍了C#调用SQLite的方法,较为详细的介绍了SQLite的功能与特点,并实例分析了C#调用SQLite的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 使用C#代码接受或拒绝Excel中的修订内容(跟踪更改)

    使用C#代码接受或拒绝Excel中的修订内容(跟踪更改)

    当你将 Excel 文档发送给他人审阅时,建议开启修订/跟踪更改功能,以确保对工作表或工作簿所做的所有更改都会被记录,对于被修改的单元格,你可以查看这些更改,并决定是否接受或拒绝它们,本文将演示如何使用C#代码接受或拒绝 Excel 中的修订,需要的朋友可以参考下
    2025-11-11
  • C#操作CSV文件类实例

    C#操作CSV文件类实例

    这篇文章主要介绍了C#操作CSV文件类,涉及C#针对csv文件的读取、转化等常用操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • 关于C#中yield关键字的深入解析

    关于C#中yield关键字的深入解析

    这篇文章主要给大家介绍了关于C#中yield关键字的深入解析,文中通过示例代码介绍的非常详细,对大家的学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • C#在Excel表格中插入、编辑和删除批注

    C#在Excel表格中插入、编辑和删除批注

    这篇文章主要为大家详细介绍了C#如何在Excel表格中插入、编辑和删除批注,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • C#手动操作DataGridView使用各种数据源填充表格实例

    C#手动操作DataGridView使用各种数据源填充表格实例

    本文主要介绍了C#手动操作DataGridView使用各种数据源填充表格实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论