首页 > 编程语言 >C#使用7z进行文件压缩/解压缩

C#使用7z进行文件压缩/解压缩

时间:2024-06-21 11:14:38浏览次数:21  
标签:string C# 压缩 解压缩 archiveFilePath path sZipExtr 7z

C#使用7z进行文件压缩/解压缩

引言

7z是一种主流高效的压缩格式,它拥有极高的压缩比。下面我来介绍下如何在C#中使用7z.dll进行文件的压缩与解压缩。

1.引用开源库

SevenZipSharp

开源地址https://github.com/tomap/SevenZipSharp

2.代码封装

public static class SevenZipHelper
{
    static SevenZipHelper()
    {
        // 设置7z.dll所在路径
        var path = "bin/7z.dll";
        if (File.Exists(path))
        {
            path = Path.GetFullPath(path);
        }

        SevenZipExtractor.SetLibraryPath(path);
    }

    /// <summary>
    /// 解压
    /// </summary>
    /// <param name="archiveFilePath">压缩包路径</param>
    /// <param name="outputDirectoryPath">输出路径</param>
    /// <param name="password">密码</param>
    public static void ExtractFile(string archiveFilePath, string outputDirectoryPath, string password = "")
    {
        if (!Directory.Exists(outputDirectoryPath))
            Directory.CreateDirectory(outputDirectoryPath);

        using (SevenZipExtractor sZipExtr = new SevenZipExtractor(archiveFilePath))
        {
            sZipExtr.Extracting += ((s, e) =>
            {
            });

            sZipExtr.FileExtractionStarted += ((s, e) =>
            {
            });

            sZipExtr.FileExists += ((s, e) =>
            {
            });

            sZipExtr.ExtractionFinished += ((s, e) =>
            {
            });

            sZipExtr.ExtractArchive(outputDirectoryPath);
        }
    }

    /// <summary>
    /// 压缩
    /// </summary>
    /// <param name="directory">需要压缩的文件夹路径</param>
    /// <param name="archiveFilePath">压缩包的路径</param>
    /// <param name="password">密码</param>
    public static void CompressFile(string directory, string archiveFilePath, string password = "")
    {
        var outDir = Path.GetDirectoryName(archiveFilePath);
        if (!Directory.Exists(outDir))
            Directory.CreateDirectory(outDir);

        SevenZipCompressor cmp = new SevenZipCompressor();
        cmp.ArchiveFormat = OutArchiveFormat.SevenZip;
        cmp.CompressionLevel = CompressionLevel.Ultra;
        cmp.CompressDirectory(directory, archiveFilePath);
    }
}

3.代码调用

压缩文件夹

SevenZipHelper.CompressFile("test", "test.7z");

解压

SevenZipHelper.ExtractFile("test.7z", "test");

注: 原作者的库只支持.Net 4.5,需要.Net Core版本的可以在Nuget上找找,有修改版

标签:string,C#,压缩,解压缩,archiveFilePath,path,sZipExtr,7z
From: https://www.cnblogs.com/DriftingLeaf/p/18260084

相关文章

  • count(1)与count(*)区别
    count(1)和count(*)都是用来计算数据库表中行数的函数,但它们有一些微小的区别。count(1):这个函数会计算指定列(在这里是1)中非空值的数量。在实际应用中,通常使用count(1)来计算行数,因为它更简洁,而且不需要关心具体的列名。count(*):这个函数会计算表中所有行的数量,包括含有NU......
  • Windows的Gitlab Runner搭配的PowerShell脚本:自动下载Directory.Build.props相关文件
    简介GitlabRunner在Windows上运行之后,我们在.gitlab-ci.yml中编写script语句,思路和Linux是一样。但是考虑到Windows的特点,为了让程序员少接触一些知识点,以及给未来执行作业的时候预留更多的操作空间。简单说就是未来修改执行作业时候的逻辑,但是每个软件仓库根目录下的.gitlab-ci......
  • 今天才知道原来C#操作符重载函数中可以访问私有成员
    起因为了方便比较版本号,所以想到用struct封装一个结构体并重载它的操作符.因为不常使用操作符重载,以为它的成员访问级别应该和普通的静态函数没有区别直到使用时无意间发现它竟然能访问到对应成员的私有成员!!!从而可以做到在重载类型操作时不必要公开一些成员访问,达......
  • 树形DP——AcWing 285. 没有上司的舞会
    目录树形DP定义运用情况注意事项解题思路AcWing285.没有上司的舞会 题目描述运行代码代码思路改进思路改进代码(AI)其它代码代码思路树形DP定义树形DP是在树上进行的动态规划。它利用树的结构特点,通过递归或迭代的方式,在每个节点上进行状态计算和转移,以求......
  • 数位统计DP——AcWing 338. 计数问题
    数位统计DP定义数位DP(DigitalDP)是一种用于解决与数字的数位相关问题的动态规划算法。它将数字的每一位看作一个状态,通过转移状态来计算满足特定条件的数字个数或其他相关统计信息。运用情况统计满足特定条件的数字个数,例如在给定范围内有多少个数字满足某些数位特征。计算......
  • Cannot generate SSPI context
         1.分析  1)获取服务器的SPN    a)通过SQLCheck.exe(需要到微软官网进行下载)    b)通过setspn工具  2)判断SPN是否正确,如果不正确则需要矫正SPN    a)如果好的连接找不到任何SPN则会使用NLTM    b)如果好的连接能找到......
  • 10条提升大模型任务微调效果的tricks
    在大型语言模型(LLMs)的研究和应用中,如何通过微调来适应特定任务是一个关键问题。尽管提示工程(PE)在提升LLMs的零样本学习和上下文内学习方面取得了显著成效,但关于如何设计有效的微调样本以进一步提升LLMs性能的研究还相对欠缺。为解决上述问题,提出了样本设计工程SDE(SampleDe......
  • React+TS前台项目实战(十四)-- 响应式头部导航+切换语言相关组件封装
    文章目录前言Header头部相关组件1.功能分析2.相关组件代码+详细注释3.使用方式4.Gif图效果展示总结前言在这篇博客中,我们将封装一个头部组件,根据不同设备类型来显示不同的导航菜单,会继续使用Reacthooks和styled-components库来构建这个组件,此外,也会实现切换......
  • C++ 面向对象高级开发 2、头文件与类的声明
       ObjectBased(基于对象)vs ObjectOriented(面向对象)ObjectBased:面对的是单一class的设计ObjectOriented:面对的是多重classes的设计,classes和classes之间的关系。         模板就是一种抽象......
  • mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版
    Magnet是一款针对MacOS系统的窗口管理工具软件。它能够帮助用户更加高效地管理和组织桌面上的窗口,通过简单的快捷键操作,可以将窗口自动调整到指定的位置和大小,实现多窗口快速布局。Magnet还支持多显示器环境下的窗口管理,可以让用户更加轻松地在多屏幕之间切换和布局窗口。......