rust - 对文件夹进行zip压缩加密

本文提供了一种对文件夹进行zip压缩并加密的方法。

添加依赖

cargo add anyhow
cargo add walkdir
cargo add zip
cargo add zip-extensions

计算文件夹的大小

目的是对需要压缩的文件夹的大小做一个限制。当然如果资源足够的话,可以去掉此限制。

    let mut total_size: u64 = 0;// 计算文件夹的大小for metadata in WalkDir::new(source_dir).min_depth(1).max_depth(max_depth).into_iter()// 忽略正在运行的进程或无权访问的目录.filter_map(|entry| entry.ok()).filter_map(|entry| entry.metadata().ok())// 只计算文件.filter(|metadata| metadata.is_file()){total_size += metadata.len();}

压缩并加密文件夹

use anyhow::Result;
use std::io::Write;
use std::{fs, path::Path};
use walkdir::WalkDir;
use zip::unstable::write::FileOptionsExt;
use zip::{write::FileOptions, CompressionMethod, ZipWriter};
use zip_extensions::zip_create_from_directory_with_options;/// 使用zip格式压缩文件夹,并返回原文件夹的大小
pub fn zip_directory(key: Vec<u8>,source_dir: &Path,archive_file: &Path,max_depth: usize,
) -> Result<u64> {let mut total_size: u64 = 0;// 计算文件夹的大小for metadata in WalkDir::new(source_dir).min_depth(1).max_depth(max_depth).into_iter()// 忽略正在运行的进程或无权访问的目录.filter_map(|entry| entry.ok()).filter_map(|entry| entry.metadata().ok())// 只计算文件.filter(|metadata| metadata.is_file()){total_size += metadata.len();// todo 可以在此对文件夹大小上限进行判断,如果超出上限,则// return Ok(total_size);}// 压缩加密文件夹let options = FileOptions::default().compression_method(CompressionMethod::DEFLATE).with_deprecated_encryption(&key);zip_create_from_directory_with_options(&archive_file.to_path_buf(),&source_dir.to_path_buf(),options,).unwrap();Ok(total_size)
}

单元测试

use std::env;#[test]
fn test_zip_directory() {let src_file_path = env::current_dir().unwrap().join("tests");let dst_file_path = env::current_dir().unwrap().join("tests.zip");let key = get_random_key16();let _ = zip_directory(key.to_vec(), &src_file_path, &dst_file_path, 10);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年【T电梯修理】考试内容及T电梯修理作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理考试内容根据新T电梯修理考试大纲要求&#xff0c;安全生产模拟考试一点通将T电梯修理模拟考试试题进行汇编&#xff0c;组成一套T电梯修理全真模拟考试试题&#xff0c;学员可通过T电梯修理作业考试题库全真…

Linux手动创建用户不使用useradd【七步走完成】

文章目录 第一步&#xff1a;修改 /etc/passwd 文件第二步&#xff1a;修改 /etc/shadow 文件第三步&#xff1a;修改 /etc/group 文件第四步&#xff1a;新建用户家目录第五步&#xff1a;复制/etc/skel目录下的环境变量配置文件到家目录下第六步&#xff1a;修改家目录的权限…

AI系统性学习—LangChain入门

文章目录 1、LangChain入门1.1 简介1.2 架构1.3 核心概念1.2 快速入门1.3 安装 2、LangChain Prompt Template2.1 什么是提示词模版2.1 创建一个提示词模版2.2 聊天消息提示词模版2.3 模版追加示例 3、语言模型3.1 LLM基础模型3.2 LangChain聊天模型3.3 自定义模型3.4 输出解析…

基于springboot的stone音乐播放器的设计与实现

摘 要 随着我国经济的高速发展与人们生活水平的日益提高&#xff0c;人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下&#xff0c;人们更趋向于足不出户解决生活上的问题&#xff0c;stone音乐播放器展现了其蓬勃生命力和广阔的前景。与此同时&#xff0c;…

在线学习:UDS诊断 通过CANoe

本周末2天的时间&#xff0c;可以线下带大家对车载项目&#xff1a; uds诊断进行实操训练和CANoe工具的灵活使用 ​​​​​​​ 本博主从事新能源汽车的研发部&#xff0c;主要是嵌入式方面的&#xff0c;对车载测试的底层逻辑非常熟悉。 需要项目或者CANoe工具实操的可以…

数电复试速成,期末速成

【拯救者】数字电路与逻辑速成(期末考研复试专升本)均可用 1️⃣先讲每章对应的基础和题目 2️⃣接着会讲对应的题目巩固 &#x1f357;提供文档下载 这里讲的是【 &#x1f337;速成&#x1f337; 速成&#x1f337; 速成】版本&#xff0c;按课本章节来&#xff0c; 抽取重…

【Unity】捕捉PC桌面的插件

【背景】 之前介绍了如何用一款名为uWindowCapture的Unity免费插件在Unity的Canvas上展示PC桌面。经过一段时间的使用,本篇继续分享此插件的一些功能和限制。 在此感谢作者Hecomi。 【特征和限制】 一般局域网络环境只能最多达到15帧的帧率,所以别幻想用来窜流游戏或者看电…

这个简单的生活方式,为你带来满满的幸福感

在今天文章的开头&#xff0c;我想请你思考一个问题&#xff1a;影响幸福感的最大因素是什么&#xff1f; 不妨先想一想&#xff0c;再往下拉&#xff0c;继续阅读。 可能不少朋友的回答&#xff0c;会是财富、事业、理想、生活环境、社会地位…… 这些因素当然对幸福感都非常重…

解决GNURadio自定义C++ OOT块-导入块时报错问题

文章目录 前言一、问题描述二、解决方法1、安装依赖2、配置环境变量3、重新编译及安装三、结果1、添加结果2、运行结果前言 本文记录在 GNURadio 自定义 C++ OOT 块后导入块时报错 AttributeError: module myModule has no attribute multDivSelect。 一、问题描述 参考官方教…

linux文件系统使用命令更新的方法记录

在当前的项目中&#xff0c;使用的是stm32mp157&#xff0c;在烧写系统固件时&#xff0c;有少量的板子使用stm32的stm32cubeProgrammer烧录软件&#xff0c;通过USB接口&#xff0c;死活就是烧录不上&#xff0c;烧录到一半&#xff0c;usb直接就断开了&#xff0c;没办法&…

国内智能驾驶芯片领先供应商地平线智能驾驶芯片介绍

地平线国内智能驾驶芯片领先供应商&#xff0c;由国际著名机器学习专家余凯博士于2015年7月创建&#xff1b;2017年12月&#xff0c;地平线即推出了首款 智能芯片征程1和旭日1&#xff1b;2019年8月&#xff0c;宣布量产中国首款车规级智能芯片征程2并于同年10月发 布新一代AIo…

SUS-Chat-34B笔记

名称SUS-Chat: Instruction tuning done right团队南方科技大学、IDEA研究院CCNL团队代码地址https://github.com/SUSTech-IDEA/SUS-Chat简介具有超强多轮对话能力&#xff0c;擅长模仿人类思考过程&#xff0c;在各大榜单上超越同量级的模型。 介绍 SUS-Chat-34B模型是南方科…

用户行为分析是什么?为什么我们需要 bitmap?

本文非常好&#xff1a;https://blog.bcmeng.com/post/doris-bitmap.html meta搜也非常好&#xff1a;https://metaso.cn/ 用户行为分析是什么&#xff1f;简单说&#xff0c;就是围绕全体用户&#xff0c;做各种分析。用户就是一个个的 id。id 在不同方面有各种行为记录&…

查询表中数据(全列/特定列/表达式,where子句(比较/逻辑运算符),order by子句,limit筛选分页),mysql执行顺序

目录 select 全列查询 特定列查询 用表达式查询 (as) 名字 distinct 去重 where子句 比较运算符 列数据之间的比较 ​编辑 别名不能参与比较 null查询 between and in ( ... , ...) 模糊匹配 逻辑运算符 order by子句 可以使用别名 总结mysql执行顺…

开发指南016-前端图标规范

平台为了保证统一性&#xff0c;做了很多约定&#xff0c;例如按钮图标等&#xff0c;平台规定图标取自这两个地方。在整个平台上运行的系统必须保持一致。在这个层面上不允许个性发挥。 1) font-awesome import font-awesome/css/font-awesome.min.css // font-awesome …

自然灾害威力大 北斗预警守护家

从台风强降雨的洪流到山火肆虐&#xff0c;近几年来自然灾害对人民群众造成的伤害越发沉重&#xff0c;我们无法根本上杜绝自然灾害的发生&#xff0c;如果在灾害发生前能够及时准确的播报相关预警信息&#xff0c;给人民群众尽力争取转移的时间&#xff0c;那将可以减免损失&a…

使用CLion用C语言进行开发时对于不同场景应选择的环境与异常处理模型选项

选择CLion编写C语言开发环境时&#xff0c;究竟是使用VS2019&#xff08;Microsoft Visual Studio 2019&#xff09;环境还是MinGW环境&#xff0c;这主要取决于您的具体需求和偏好&#xff1a; Visual Studio 2019 (MSVC): 优点&#xff1a; VS2019 是一个功能强大的集成开发环…

实验四 前端性能优化-图片优化

仓库地址&#xff1a;bj-front: 前端性能与工程化 - Gitee.com 图像通常是网站负载的最大组成部分。互联网中的图像除了提供视觉体验&#xff0c;还需提供设备需要的合适的图像&#xff0c;选择合适的图像的格式&#xff0c;并针对图片做适当的优化&#xff0c;有利于提升页面…

统一过程的概念以及案例介绍

统一过程&#xff08;Unified Process&#xff0c;简称UP&#xff09;是一种迭代和增量的软件开发过程框架。它是用来指导如何使用面向对象的方法和UML&#xff08;统一建模语言&#xff0c;Unified Modeling Language&#xff09;来进行有效软件开发的。统一过程结合了最佳实践…

【小沐学AI】Google AI大模型的一点点学习(Python)

文章目录 1、Google AI简介1.1 Google AI Studio1.2 Bard1.3 PaLM1.4 Gemini1.5 Gemini API1.6 Vertex AI1.7 Gemma 2、Google AI开发2.1 快速入门2.1.1 配置开发环境2.1.2 列出所有模型2.1.3 从文本输入生成文本2.1.4 从图像和文本输入生成文本2.1.5 聊天对话 结语 1、Google …