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状态,查看日志发现一直重复弹出同一个info: 2024-10-18 16:57:32,739 [INFO] [AMRM Callback Handler Thread] |rm.YarnTaskSchedulerService|: Allocated: <memory:0, vCores:0> 释义: 当前应用程序没有分配到任何内存…...
闲说视频清晰度和各种格式、编码技术的发展历史
文章目录 引子清晰度视频格式:MP4、AVI 、MKV、MOV、WMV、FLV 、RMVB等等什么是视频格式MP4AVIMKVMOVWMVFLVRM / RMVB其他 编码技术:MPEG-1、MPEG-2、MPEG-4、RealVideo、DivX、XviD、H.264(AVC)、H.265(HEVCÿ…...
嵌入式职业规划
嵌入式职业规划 在嵌入式的软件开发中,可以分为: 嵌入式MCU软件开发工程师; 嵌入式Linux底层(BSP)软件开发工程师; 嵌入式Linux应用开发工程师; 嵌入式FPGA算法开发工程师 对于前两个阶段 …...
Nginx - 实现 TCP/DUP流量的按 IP 动态转发
文章目录 需求背景需求目标:使用场景:成功标准:技术要求: Ng配置测试验证 需求 Nginx Stream TCP 协议按 IP 转发 背景 为了优化网络性能和提升服务的可用性,我们需要在 Nginx 中配置 stream 模块,使其根…...
基于深度学习的进化神经网络设计
基于深度学习的进化神经网络设计(Evolutionary Neural Networks, ENNs)结合了进化算法(EA)和神经网络(NN)的优点,用于自动化神经网络架构的设计和优化。通过模拟自然进化的选择、变异、交叉等过…...
软考-软件设计师(10)-专业英语词汇汇总与新技术知识点
场景 以下为高频考点、知识点汇总。 软件设计师上午选择题知识点、高频考点、口诀记忆技巧、经典题型汇总: 软考-软件设计师(1)-计算机基础知识点:进制转换、数据编码、内存编址、串并联可靠性、海明校验码、吞吐率、多媒体等: 软考-软件设计师(1)-计算机基础知识点:进制…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
