博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang中archive/zip包
阅读量:6712 次
发布时间:2019-06-25

本文共 2027 字,大约阅读时间需要 6 分钟。

一、ZIP的操作

压缩、解压

二、GO中压缩操作

1、创建zip文件
2、向这个zip文件里写入要压缩的文件的头部信息和文件信息

package mainimport (    "os"    "log"    "archive/zip"    "io"    "fmt")func main() {    err := Zip("demo.zip", []string{})    if err != nil {        fmt.Println(err)    }}func Zip(zipFile string, fileList []string) error {    // 创建 zip 包文件    fw, err := os.Create(zipFile)    if err != nil {        log.Fatal()    }    defer fw.Close()    // 实例化新的 zip.Writer    zw := zip.NewWriter(fw)    defer func() {        // 检测一下是否成功关闭        if err := zw.Close(); err != nil {            log.Fatalln(err)        }    }()    for _, fileName := range fileList {        fr, err := os.Open(fileName)        if err != nil {            return err        }        fi, err := fr.Stat()        if err != nil {            return err        }        // 写入文件的头信息        fh, err := zip.FileInfoHeader(fi)        w, err := zw.CreateHeader(fh)        if err != nil {            return err        }        // 写入文件内容        _, err = io.Copy(w, fr)        if err != nil {            return err        }    }    return nil}

三、GO中解缩操作

1、遍历读取zip内压缩文件信息
2、根据zip内压缩文件的数据创建文件,并写入对应数据

package mainimport (    "archive/zip"    "os"    "io"    "fmt")func main() {    err := Unzip("demo.zip")    if err != nil {        fmt.Println(err)    }}func Unzip(zipFile string) error {    zr, err := zip.OpenReader(zipFile)    defer zr.Close()    if err != nil {        return err    }    for _, file := range zr.File {        // 如果是目录,则创建目录        if file.FileInfo().IsDir() {            if err = os.MkdirAll(file.Name, file.Mode());err != nil {                return err            }            continue        }        // 获取到 Reader        fr, err := file.Open()        if err != nil {            return err        }        fw, err := os.OpenFile(file.Name, os.O_CREATE|os.O_RDWR|os.O_TRUNC, file.Mode())        if err != nil {            return err        }        _, err = io.Copy(fw, fr)        if err != nil {            return err        }        fw.Close()        fr.Close()    }    return nil}

参考链接:

转载地址:http://hzolo.baihongyu.com/

你可能感兴趣的文章
Azure China (12) 域名备案问题
查看>>
ActiveX组件与JavaScript交互
查看>>
2013第52周六当前用到的一些软件及网站
查看>>
DrawDibDraw函数的使用方法
查看>>
两种将字符串转换成浮点数的方法
查看>>
Xcode 调试技巧-b
查看>>
几种常见SQL分页方式效率比较
查看>>
socket中的SO_REUSEADDR
查看>>
Android中Bitmap、Drawable、byte[]转换
查看>>
[杂记]是否有必要精通unix的shell语法?
查看>>
Oracle 数据类型及存储方式(二)
查看>>
UNIX时间戳的应用-JAVA
查看>>
Intelij 中javax.servlet.http.HttpServlet包导不进来
查看>>
dynamic disk无损转为basic disk
查看>>
SoftReference缓存图片
查看>>
PHP关闭(禁止)脚本错误提示的方法及让脚本错误提示输出为日志文件的方法
查看>>
URAL 1013 K-based Numbers. Version 3
查看>>
[转]请记住别拿自己跟别人比较
查看>>
Boost简介
查看>>
计算机常用端口一览表:
查看>>