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

go压缩的使用

基础:使用go创建一个zip

func base(path string) {// 创建 zip 文件zipFile, err := os.Create("test.zip")if err != nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter := zip.NewWriter(zipFile)defer zipWriter.Close()// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("这个地方填文件的新名字.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// zipWriter.Close() 在 defer 中已经处理println("ZIP 文件创建成功!")
}

这样可以得到一个path的压缩文件,打开如下:


想要得到一个具备层级的压缩文件,如下图:

需要先做的是创建所需的层级。

即,如果想要在压缩文件中呈现:

压缩文件:北京/朝阳区/美食地图.jpg

需要先创建 “北京/朝阳区/” 这个路径,而创建文件夹和创建文件的方式是一样的:
 

	// 创建一个路径_, err = zipWriter.Create("北京/朝阳区")if err != nil {panic(err)}

合起来就是:
 

func pathZip(path string) {// 创建 zip 文件zipFile, err := os.Create("test.zip")if err != nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter := zip.NewWriter(zipFile)defer zipWriter.Close()// 创建一个路径_, err = zipWriter.Create("北京/朝阳区")if err != nil {panic(err)}// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("北京/朝阳区/美食地图.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// zipWriter.Close() 在 defer 中已经处理println("ZIP 文件创建成功!")
}

注意,顺序不可以颠倒,要先创建路径,然后创建文件,然后再把文件拷贝到压缩包中。

如果要拷贝另一个文件,需要再创建一个文件且拷贝后才可以,不然之前的文件关闭了就无法再复制进去了。

下面这样是不可行的:

	// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("美食地图.jpg")if err != nil {panic(err)}// 创建一个压缩包中的文件fileWriter2, err := zipWriter.Create("美食地图2.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter2, f); err != nil {panic(err)}

下面这样是可行的:

	// 创建一个压缩包中的文件fileWriter, err := zipWriter.Create("美食地图.jpg")if err != nil {panic(err)}// 打开要压缩的文件f, err := os.Open(path)if err != nil {panic(err)}defer f.Close()// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter, f); err != nil {panic(err)}// 创建一个压缩包中的文件fileWriter2, err := zipWriter.Create("美食地图2.jpg")if err != nil {panic(err)}// 将文件内容拷贝到 ZIP 文件中if _, err := io.Copy(fileWriter2, f); err != nil {panic(err)}

成功了:

相关文章:

go压缩的使用

基础:使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…...

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中,经常会需要进行各种业务流程梳理,而流程图就是梳理业务时必要的手段,同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…...

【微信小程序_19_自定义组件(1)】

摘要:本文主要介绍了小程序开发中自定义组件的相关知识。包括组件的创建与引用,可在项目根目录创建组件文件夹,生成相应文件,并根据使用频率选择全局或局部引用。还阐述了组件和页面的区别,如组件的.json 文件需声明 “component: true”,.js 文件调用 Component () 函数…...

标准版admin后台页面添加及开发操作流程及注意事项

基础介绍 CRMEB后台管理是基于vue2技术栈进行开发搭建的 Vue Router 使用的是v3版本,mode为history模式 如需修改 mode 请在src/setting.js中修改routerMode 新建页面 新建路由 根据目录结构,需要在src/router/modules中对应模块中,添加对…...

‘perl‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

‘perl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 明明已经根据教程安装了perl环境,但是在cmd中依赖报该错误,本章教程提供解决办法。 一、激活perl环境 state shell ActiveState-Perl-5.36.0此时输入perl -v 是可以直接输出perl版本号的。 二、找到perl的执…...

如何利用CMMI帮助组织消除低价值流程

CMMI发展到今天,过程中历经了不断的蜕变和升级。从早期的CMM到今天的CMMI3.0,从早期的22个过程域优化组合到今天的20个实践域,从早期隶属的SEI到今天的CMMI研究院,所有的变化都是与时俱进,都是为了提供更好的实践&…...

如何理解线程安全这个概念?

文章目录 为什么需要线程安全?线程安全的实现方式总结推荐阅读文章 线程安全(Thread Safety)是指在多线程环境中,多个线程同时访问某个对象时,不会导致程序出现错误的状态或不一致的结果。简单来说,线程安全…...

代码随想录算法训练营第48天| 739. 每日温度,496.下一个更大元素 I,503.下一个更大元素II

第十一章:图论part01 图论理论基础 大家可以在看图论理论基础的时候,很多内容 看不懂,例如也不知道 看完之后 还是不知道 邻接矩阵,邻接表怎么用, 别着急。 理论基础大家先对各个概念有个印象就好,后面在…...

Qt 支持打包成安卓

1. 打开维护Qt,双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件,点击下一步, 勾选Android, 点击下一步 3.更新安装中 4.进度100%,完成安装,重启。 5.打开 Qt Creator,编辑-》Preferences... 6.进…...

PDF工具类源码

PDF-Guru: PDF Guru Anki是一款以PDF为中心的多功能办公学习工具箱软件,包含四大板块功能:PDF实用工具箱、Anki制卡神器、Anki最强辅助、视频笔记神器,软件功能众多且强大,熟练运用可以大幅提高办公和学习效率,绝对是您…...

NirCmd-Gui-Chinese-Introduction

简介 此程序是我的一个练习作品,单纯是为了提升编程水平,次要是为了做一个NirCmd的Gui,其实主要成分还是Gui,核心代码就两三行。 主要是Gui,功能基于nircmd.exe实现,程序本身不提供一些重要的功能。 关于…...

吴恩达深度学习笔记(7)

误差分析: 你运行一个算法代替人类计算,但是没有达到人类的效果,需要手动检查算法中的错误,对模型的一些部分做相应调整,才能更好地提升分类的精度。如果不加分析去做,可能几个月的努力对于提升精度并没有…...

二、数据离线处理场景化解决方案

https://connect.huaweicloud.com/courses/learn/Learning/sp:cloudEdu_?courseNocourse-v1:HuaweiXCBUCNXE147Self-paced&courseType1 1.离线处理方案 **业务场景-安平领域** 业务场景-金融领域 离线批处理常用组件 HDFS:分布式文件系统,为各种…...

算法题总结(十四)——贪心算法(上)

贪心算法 什么是贪心 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心的套路(什么时候用贪心) 刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试…...

hive on tez 指定队列后任务一直处于running状态

如上图所示一直处于running状态&#xff0c;查看日志发现一直重复弹出同一个info&#xff1a; 2024-10-18 16:57:32,739 [INFO] [AMRM Callback Handler Thread] |rm.YarnTaskSchedulerService|: Allocated: <memory:0, vCores:0> 释义: 当前应用程序没有分配到任何内存…...

闲说视频清晰度和各种格式、编码技术的发展历史

文章目录 引子清晰度视频格式&#xff1a;MP4、AVI 、MKV、MOV、WMV、FLV 、RMVB等等什么是视频格式MP4AVIMKVMOVWMVFLVRM / RMVB其他 编码技术&#xff1a;MPEG-1、MPEG-2、MPEG-4、RealVideo、DivX、XviD、H.264&#xff08;AVC&#xff09;、H.265&#xff08;HEVC&#xff…...

嵌入式职业规划

嵌入式职业规划 在嵌入式的软件开发中&#xff0c;可以分为&#xff1a; 嵌入式MCU软件开发工程师&#xff1b; 嵌入式Linux底层&#xff08;BSP&#xff09;软件开发工程师&#xff1b; 嵌入式Linux应用开发工程师&#xff1b; 嵌入式FPGA算法开发工程师 对于前两个阶段 …...

Nginx - 实现 TCP/DUP流量的按 IP 动态转发

文章目录 需求背景需求目标&#xff1a;使用场景&#xff1a;成功标准&#xff1a;技术要求&#xff1a; Ng配置测试验证 需求 Nginx Stream TCP 协议按 IP 转发 背景 为了优化网络性能和提升服务的可用性&#xff0c;我们需要在 Nginx 中配置 stream 模块&#xff0c;使其根…...

基于深度学习的进化神经网络设计

基于深度学习的进化神经网络设计&#xff08;Evolutionary Neural Networks, ENNs&#xff09;结合了进化算法&#xff08;EA&#xff09;和神经网络&#xff08;NN&#xff09;的优点&#xff0c;用于自动化神经网络架构的设计和优化。通过模拟自然进化的选择、变异、交叉等过…...

软考-软件设计师(10)-专业英语词汇汇总与新技术知识点

场景 以下为高频考点、知识点汇总。 软件设计师上午选择题知识点、高频考点、口诀记忆技巧、经典题型汇总: 软考-软件设计师(1)-计算机基础知识点:进制转换、数据编码、内存编址、串并联可靠性、海明校验码、吞吐率、多媒体等: 软考-软件设计师(1)-计算机基础知识点:进制…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

深入理解 React 样式方案

React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架&#xff0c;开发Windows桌面应用&#xff0c;把一个html页面作为GUI设计放到Saucer里&#xff0c;隐藏掉运行时弹…...

浏览器兼容-polyfill-本地服务-优化

babel和webpack结合 npx babel src --out-dir dist --presetsbabel/preset-env 这是把src下面的东西都用babel转化一下 webpack可以和babel结合使用&#xff0c;首先下载一个这东西&#xff1a; npm install babel-loader -D webpack配置&#xff1a; const path requir…...

自然语言处理——语言模型

语言模型 n元文法参数估计数据平滑方法加1法 神经网络模型提出原因前馈神经网络&#xff08;FNN&#xff09;循环神经网络 n元文法 大规模语料库的出现为自然语言统计处理方法的实现提供了可能&#xff0c;统计方法的成功应用推动了语料库语言学的发展。 语句 &#x1d460; …...