当前位置: 首页 > news >正文

c#使用SevenZipSharp实现压缩文件和目录

封装了一个类,方便使用SevenZipSharp,支持加入进度显示事件。

双重加密压缩工具范例:

using SevenZip;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ProcessItems
{class SevenZipSharpUser{// 假设这是某个类中的一个事件定义public  event EventHandler<ProgressEventArgs> ProgressUpdated = null;public  static bool SetSetLibraryPath(){//设置库路径string currentDirectory = AppDomain.CurrentDomain.BaseDirectory;string dllPath = GetAppropriate7zDllPath(currentDirectory);if (!File.Exists(dllPath)){return false;}SevenZipSharpUser.SetSetLibraryPath(dllPath);return true;}public static void SetSetLibraryPath(string s7zDllPath){SevenZipBase.SetLibraryPath(s7zDllPath);}public bool CompressItem(string inputItem, string outputFile, string password = null){string directory = Path.GetDirectoryName(outputFile);if (!Directory.Exists(directory)){Directory.CreateDirectory(directory);}if (Directory.Exists(inputItem)){return CompressDir(inputItem, outputFile, password);}else if (File.Exists(inputItem)){return CompressFile(inputItem, outputFile, password);}return false;}public bool DoubleCompressItem(string inputItem, string outputFile, string password1 = null, string password2 = null){string directory = Path.GetDirectoryName(outputFile);string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(outputFile);string sFirstDstPath = Path.Combine(directory, $"{fileNameWithoutExtension}{".7zx"}");CompressItem(inputItem, sFirstDstPath, password1);CompressItem(sFirstDstPath, outputFile, password2);File.Delete(sFirstDstPath);return false;}public bool ExtractItem(string inputItem, string outputDir, string password = null){// 确保输出目录存在string directory = Path.GetDirectoryName(outputDir);if (!Directory.Exists(directory)){Directory.CreateDirectory(directory);}// 检查输入文件是否存在if (!File.Exists(inputItem)){Console.WriteLine($"输入文件不存在: {inputItem}");return false;}try{// 使用 SevenZipExtractor 打开 .7z 文件if (string.IsNullOrEmpty(password)){using (var extractor = new SevenZipExtractor(inputItem)){// 提取所有文件到输出目录extractor.ExtractArchive(outputDir);}}else{using (var extractor = new SevenZipExtractor(inputItem, password)){// 提取所有文件到输出目录extractor.ExtractArchive(outputDir);}}// 解压成功return true;}catch (Exception ex){// 处理异常,例如密码错误或文件损坏Console.WriteLine($"解压文件时发生错误: {ex.Message}");return false;}}public string GetUniqueFilePath(string filePath){string directory = Path.GetDirectoryName(filePath);string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(filePath);string extension = Path.GetExtension(filePath);int counter = 1;string newFilePath = filePath;while (File.Exists(newFilePath)){newFilePath = Path.Combine(directory, $"{fileNameWithoutExtension}{counter}{extension}");counter++;}return newFilePath;}public bool CompressFile(string inputFile, string outputFile, string password = null){try{// 检查输入文件是否存在if (!File.Exists(inputFile)){throw new FileNotFoundException("输入文件不存在。", inputFile);}// 创建 SevenZipCompressor 实例var compressor = new SevenZipCompressor();// 设置压缩级别和档案格式compressor.CompressionLevel = CompressionLevel.Normal;compressor.ArchiveFormat = OutArchiveFormat.SevenZip;// 订阅进度更新事件if (ProgressUpdated != null){compressor.Compressing += ProgressUpdated;}// 压缩文件compressor.CompressFilesEncrypted(outputFile, password, inputFile);if (ProgressUpdated != null){compressor.Compressing -= ProgressUpdated;}// 压缩成功后返回 truereturn true;}catch (Exception ex){// 在发生异常时记录日志、抛出异常或返回 false// 这里简单地返回 false,但你可以根据需要更改此行为Console.WriteLine($"压缩文件时发生错误: {ex.Message}");return false;}finally{}}public bool CompressDir(string stInputDir, string stOutputFile, string stPwd){try{// 检查输入文件是否存在if (!Directory.Exists(stInputDir)){throw new FileNotFoundException("输入目录不存在。", stInputDir);}// 创建 SevenZipCompressor 实例var compressor = new SevenZipCompressor();// 设置压缩级别和档案格式compressor.CompressionLevel = CompressionLevel.Normal;compressor.ArchiveFormat = OutArchiveFormat.SevenZip;// 订阅进度更新事件if (ProgressUpdated != null){compressor.Compressing += ProgressUpdated;}// 压缩文件compressor.CompressDirectory(stInputDir, stOutputFile, stPwd);if (ProgressUpdated != null){compressor.Compressing -= ProgressUpdated;}// 压缩成功后返回 truereturn true;}catch (Exception ex){// 在发生异常时记录日志、抛出异常或返回 false// 这里简单地返回 false,但你可以根据需要更改此行为Console.WriteLine($"压缩文件时发生错误: {ex.Message}");return false;}finally{}}private static string GetAppropriate7zDllPath(string basePath){string dllName = "7z.dll";string dllPath = Path.Combine(basePath, dllName);// Check if the system is 64-bit or 32-bitif (Environment.Is64BitOperatingSystem){// If the system is 64-bit, check for a specific 64-bit version of the DLLstring dll64Path = Path.Combine(basePath, "7z.dll"); // Example name for 64-bit versionif (File.Exists(dll64Path)){return dll64Path;}// If the specific 64-bit version is not found, fall back to the generic name}else{// If the system is 32-bit, check for a specific 32-bit version of the DLLstring dll32Path = Path.Combine(basePath, "7-zip32.dll"); // Example name for 32-bit versionif (File.Exists(dll32Path)){return dll32Path;}// If the specific 32-bit version is not found, fall back to the generic name}// If neither specific version is found, return the generic DLL name (which might be a universal version or an error)return dllPath;}}
}

使用方法:

            //设置库if (!SevenZipSharpUser.SetSetLibraryPath()){MessageBox.Show("7z.dll库引用失败!", "错误!", MessageBoxButtons.OK, MessageBoxIcon.Error);}//这里是处理任务逻辑开始========start===========if (itemInfo.bDoubleCompress){szu.DoubleCompressItem(itemInfo.sItemPath, itemInfo.sDstPath, itemInfo.sPassword1, itemInfo.sPassword2);}else{szu.CompressItem(itemInfo.sItemPath, itemInfo.sDstPath, itemInfo.sPassword1);}//这里是处理任务逻辑结束========end=============

相关文章:

c#使用SevenZipSharp实现压缩文件和目录

封装了一个类&#xff0c;方便使用SevenZipSharp&#xff0c;支持加入进度显示事件。 双重加密压缩工具范例&#xff1a; using SevenZip; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.…...

【从0带做】基于Springboot3+Vue3的高校食堂点餐系统

大家好&#xff0c;我是武哥&#xff0c;最近给大家手撸了一个基于SpringBoot3Vue3的高校食堂点餐系统&#xff0c;可用于毕业设计、课程设计、练手学习&#xff0c;系统全部原创&#xff0c;如有遇到网上抄袭站长的&#xff0c;欢迎联系博主~ 详细介绍 https://www.javaxm.c…...

2025年01月09日Github流行趋势

1. 项目名称&#xff1a;khoj 项目地址url&#xff1a;https://github.com/khoj-ai/khoj项目语言&#xff1a;Python历史star数&#xff1a;22750今日star数&#xff1a;1272项目维护者&#xff1a;debanjum, sabaimran, MythicalCow, aam-at, eltociear项目简介&#xff1a;你…...

PostgreSQL学习笔记(二):PostgreSQL基本操作

PostgreSQL 是一个功能强大的开源关系型数据库管理系统 (RDBMS)&#xff0c;支持标准的 SQL 语法&#xff0c;并扩展了许多功能强大的操作语法. 数据类型 数值类型 数据类型描述存储大小示例值SMALLINT小范围整数&#xff0c;范围&#xff1a;-32,768 到 32,7672 字节-123INTE…...

关于内网外网,ABC类地址,子网掩码划分

本文的三个关键字是&#xff1a;内网外网&#xff0c;ABC类地址&#xff0c;子网掩码划分。围绕以下问题展开&#xff1a; 如何从ip区分外网、内网&#xff1f;win和linux系统中&#xff0c;如何查询自己的内网ip和外网ip。开发视角看内外网更多是处于安全考虑&#xff0c;接口…...

nginx 配置 本地启动

1.nginx下载地址&#xff1a;nginx: download nginx详解&#xff1a;Nginx配置终极版指南&#xff08;全网最详细&#xff09;_nginx_脚本之家 2.vue 项目打包生成dist文件里面的文件复制到下载好的nginx的html目录下 3.配置nginx配置文件 打包生成的dist前端包都是属于生产环…...

UE5 打包要点

------------------------- 1、需要环境 win sdk &#xff0c;大约3G VS&#xff0c;大约10G 不安装就无法打包&#xff0c;就是这么简单。 ----------------------- 2、打包设置 编译类型&#xff0c;开发、调试、发行 项目设置-地图和模式&#xff0c;默认地图 项目…...

OneFlow的简单介绍

OneFlow 是北京一流科技有限公司旗下的采用全新架构设计的开源工业级通用深度学习框架。以下是关于 OneFlow 的详细介绍&#xff1a; 本篇文章的目录 特点 功能 应用场景 发展历程 特点 简洁易用的接口&#xff1a;为深度学习相关的算法工程师提供一套简洁易用的用户接口…...

聊一聊 C#异步 任务延续的三种底层玩法

一&#xff1a;背景 1. 讲故事 最近聊了不少和异步相关的话题&#xff0c;有点疲倦了&#xff0c;今天再写最后一篇作为近期这类话题的一个封笔吧&#xff0c;下篇继续写我熟悉的 生产故障 系列&#xff0c;突然亲切感油然而生&#xff0c;哈哈&#xff0c;免费给别人看程序故…...

(k8s)Flannel Error问题解决!

1.问题描述 书接上回&#xff0c;我们在解决kubectl不断重启的时候引入了Flannel 网络插件&#xff0c;但是一上来就报错&#xff0c; 2.问题解决 自己的思路&#xff1a;照例开始检查 1.先检查一下目前Flannel的pod kubectl get pods --all-namespaces 2.检查 Flannel的po…...

Delaunay三角刨分算法理解及c#过程实现

Delaunay三角刨分算法理解及c#过程实现 0 引言1 关于三角剖分2 Delaunay三角剖分算法实现及对比3 结语0 引言 💻💻AI一下💻💻 三角剖分是什么? 三角剖分是一种将平面或曲面划分成三角形集合的方法。在二维平面中,给定一个平面区域(可以是多边形等),通过连接区域…...

Backend - ADO.NET(C# 操作Oracle、PostgreSQL DB)

目录 一、引入参考 1. ConfigurationManager的调用前提&#xff1a; 2. NpgsqlConnection的调用前提&#xff1a; 3. OracleConnection的调用前提&#xff1a; 二、设置数据库链接字串 1. 在App.config中设定链接数据库详情 2. 获取数据库链接字串 三、调用 1.调用Oracle数据库…...

Idea-离线安装SonarLint插件地址

地址&#xff1a; SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..&#xff0c;选中下载好的插件&#xff0c;然后重启idea...

Leetcode Hot100 第三题 234. 回文链表

用快慢指针找到链表中间节点反转后面一段链表遍历每个节点做判断为什么是while pre: 不能写while head呢 ? 答&#xff1a;因为slow节点在反转后&#xff0c;他的前序节点除了反转之后的节点&#xff0c;之前正序的节点仍然存在的&#xff0c;即slow.pre 的next依旧是slow, 我…...

Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!

工欲善其事&#xff0c;必先利其器。 学习Python的第一步不要再加收藏夹了&#xff01;提高执行力&#xff0c;先给自己装好Python。 1. Python 下载 1.1. 下载安装包 既然要下载Python&#xff0c;我们直接进入python官网下载即可 Python 官网&#xff1a;Welcome to Pyt…...

SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示

使用Beetl开发网页时&#xff0c;在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下&#xff1a; &#xff08;1&#xff09;首先Spring Security框架需要允许js、css、图片资源免授权访问。 &#xff08;2&#xff09;网站开发时&#xff0…...

ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现

ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现 目录 ARIMA模型 (AutoRegressive Integrated Moving Average) 算法详解与PyTorch实现1. ARIMA模型概述1.1 时间序列预测1.2 ARIMA的优势2. ARIMA的核心技术2.1 自回归 (AR)2.2 差分 (I)2.3 移动平…...

【Uniapp-Vue3】swiper滑块视图容器的用法

我们使用swiper标签就可以实现轮播图的效果。 一、swiper组件的结构 整体的轮播图使用swiper标签&#xff0c;轮播的每一页使用swiper-item标签。 <template><swiper class"swiper"><swiper-item><view class"swiper-item">111…...

allure报告修改默认语言为中文

1、项目根目录创建.py文件&#xff0c;把代码复制进去 import os from pathlib import Pathdef create_settings_js_file(directory"../pytest_mytt/reports/allures/", filenamesettings.js):# 创建或确认目录存在Path(directory).mkdir(parentsTrue, exist_okTrue…...

国产3D CAD将逐步取代国外软件

在工业软件的关键领域&#xff0c;计算机辅助设计&#xff08;CAD&#xff09;软件对于制造业的重要性不言而喻。近年来&#xff0c;国产 CAD 的发展态势迅猛&#xff0c;展现出巨大的潜力与机遇&#xff0c;正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...