当前位置: 首页 > 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)}

成功了:

http://www.lryc.cn/news/463178.html

相关文章:

  • 一图解千言,了解常见的流程图类型及其作用
  • 【微信小程序_19_自定义组件(1)】
  • 标准版admin后台页面添加及开发操作流程及注意事项
  • ‘perl‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 如何利用CMMI帮助组织消除低价值流程
  • 如何理解线程安全这个概念?
  • 代码随想录算法训练营第48天| 739. 每日温度,496.下一个更大元素 I,503.下一个更大元素II
  • Qt 支持打包成安卓
  • PDF工具类源码
  • NirCmd-Gui-Chinese-Introduction
  • 吴恩达深度学习笔记(7)
  • 二、数据离线处理场景化解决方案
  • 算法题总结(十四)——贪心算法(上)
  • hive on tez 指定队列后任务一直处于running状态
  • 闲说视频清晰度和各种格式、编码技术的发展历史
  • 嵌入式职业规划
  • Nginx - 实现 TCP/DUP流量的按 IP 动态转发
  • 基于深度学习的进化神经网络设计
  • 软考-软件设计师(10)-专业英语词汇汇总与新技术知识点
  • PyTorch 2.5 发布带来一些新特性和改进
  • 算法:560.和为k的子数组
  • C++之list(2)
  • React Componet类组件详解(老项目)
  • 位运算题目-Java实现-LeetCode题解:判断字符是否唯一-丢失的数字-两整数之和-只出现一次的数字 II-消失的两个数字
  • 复合泊松过程
  • [week1] newstar ctf ezAndroidStudy
  • TCP——Socket
  • OpenStack服务Swift重启失效(已解决)
  • System.Text.Json类库进行json转化时ValueKind:Object问题
  • 免费Excel工作表同类数据合并工具