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实现压缩文件和目录
封装了一个类,方便使用SevenZipSharp,支持加入进度显示事件。 双重加密压缩工具范例: using SevenZip; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.…...
【从0带做】基于Springboot3+Vue3的高校食堂点餐系统
大家好,我是武哥,最近给大家手撸了一个基于SpringBoot3Vue3的高校食堂点餐系统,可用于毕业设计、课程设计、练手学习,系统全部原创,如有遇到网上抄袭站长的,欢迎联系博主~ 详细介绍 https://www.javaxm.c…...
2025年01月09日Github流行趋势
1. 项目名称:khoj 项目地址url:https://github.com/khoj-ai/khoj项目语言:Python历史star数:22750今日star数:1272项目维护者:debanjum, sabaimran, MythicalCow, aam-at, eltociear项目简介:你…...
PostgreSQL学习笔记(二):PostgreSQL基本操作
PostgreSQL 是一个功能强大的开源关系型数据库管理系统 (RDBMS),支持标准的 SQL 语法,并扩展了许多功能强大的操作语法. 数据类型 数值类型 数据类型描述存储大小示例值SMALLINT小范围整数,范围:-32,768 到 32,7672 字节-123INTE…...
关于内网外网,ABC类地址,子网掩码划分
本文的三个关键字是:内网外网,ABC类地址,子网掩码划分。围绕以下问题展开: 如何从ip区分外网、内网?win和linux系统中,如何查询自己的内网ip和外网ip。开发视角看内外网更多是处于安全考虑,接口…...
nginx 配置 本地启动
1.nginx下载地址:nginx: download nginx详解:Nginx配置终极版指南(全网最详细)_nginx_脚本之家 2.vue 项目打包生成dist文件里面的文件复制到下载好的nginx的html目录下 3.配置nginx配置文件 打包生成的dist前端包都是属于生产环…...
UE5 打包要点
------------------------- 1、需要环境 win sdk ,大约3G VS,大约10G 不安装就无法打包,就是这么简单。 ----------------------- 2、打包设置 编译类型,开发、调试、发行 项目设置-地图和模式,默认地图 项目…...
OneFlow的简单介绍
OneFlow 是北京一流科技有限公司旗下的采用全新架构设计的开源工业级通用深度学习框架。以下是关于 OneFlow 的详细介绍: 本篇文章的目录 特点 功能 应用场景 发展历程 特点 简洁易用的接口:为深度学习相关的算法工程师提供一套简洁易用的用户接口…...
聊一聊 C#异步 任务延续的三种底层玩法
一:背景 1. 讲故事 最近聊了不少和异步相关的话题,有点疲倦了,今天再写最后一篇作为近期这类话题的一个封笔吧,下篇继续写我熟悉的 生产故障 系列,突然亲切感油然而生,哈哈,免费给别人看程序故…...
(k8s)Flannel Error问题解决!
1.问题描述 书接上回,我们在解决kubectl不断重启的时候引入了Flannel 网络插件,但是一上来就报错, 2.问题解决 自己的思路:照例开始检查 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的调用前提: 2. NpgsqlConnection的调用前提: 3. OracleConnection的调用前提: 二、设置数据库链接字串 1. 在App.config中设定链接数据库详情 2. 获取数据库链接字串 三、调用 1.调用Oracle数据库…...
Idea-离线安装SonarLint插件地址
地址: SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..,选中下载好的插件,然后重启idea...
Leetcode Hot100 第三题 234. 回文链表
用快慢指针找到链表中间节点反转后面一段链表遍历每个节点做判断为什么是while pre: 不能写while head呢 ? 答:因为slow节点在反转后,他的前序节点除了反转之后的节点,之前正序的节点仍然存在的,即slow.pre 的next依旧是slow, 我…...
Python教程丨Python环境搭建 (含IDE安装)——保姆级教程!
工欲善其事,必先利其器。 学习Python的第一步不要再加收藏夹了!提高执行力,先给自己装好Python。 1. Python 下载 1.1. 下载安装包 既然要下载Python,我们直接进入python官网下载即可 Python 官网:Welcome to Pyt…...
SpringBoot项目实战(39)--Beetl网页HTML文件中静态图片及CSS、JS文件的引用和展示
使用Beetl开发网页时,在网页中使用的CSS、JS、图片等静态资源需要进行适当的配置才可以展示。大致的过程如下: (1)首先Spring Security框架需要允许js、css、图片资源免授权访问。 (2)网站开发时࿰…...
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标签,轮播的每一页使用swiper-item标签。 <template><swiper class"swiper"><swiper-item><view class"swiper-item">111…...
allure报告修改默认语言为中文
1、项目根目录创建.py文件,把代码复制进去 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将逐步取代国外软件
在工业软件的关键领域,计算机辅助设计(CAD)软件对于制造业的重要性不言而喻。近年来,国产 CAD 的发展态势迅猛,展现出巨大的潜力与机遇,正逐步改变着 CAD 市场长期由国外软件主导的格局。 国产CAD发展现状 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
