内容简介:golang压缩和解压缩zip文件一个简单例子说明如何使用golang提供的archive/zip包实现zip文件的压缩和解压缩。压缩
golang压缩和解压缩zip文件
一个简单例子说明如何使用golang提供的archive/zip包实现zip文件的压缩和解压缩。
压缩
提供两个参数:
- 一个是输入源文件
- 另一个是输出zip压缩文件
其中输入源文件可以是一个文件,也可以好似一个目录,如果是目录那么目录下的所有文件都会被压缩到输出。
当然这个函数很容易被扩展成支持多个输入源文件/目录的情况。
// srcFile could be a single file or a directory func Zip(srcFile string, destZip string) error { zipfile, err := os.Create(destZip) if err != nil { return err } defer zipfile.Close() archive := zip.NewWriter(zipfile) defer archive.Close() filepath.Walk(srcFile, func(path string, info os.FileInfo, err error) error { if err != nil { return err } header, err := zip.FileInfoHeader(info) if err != nil { return err } header.Name = path if info.IsDir() { header.Name += "/" } else { header.Method = zip.Deflate } writer, err := archive.CreateHeader(header) if err != nil { return err } if ! info.IsDir() { file, err := os.Open(path) if err != nil { return err } defer file.Close() _, err = io.Copy(writer, file) } return err }) return err }
解压缩
也有提供两个参数:
- 一个是输入源zip文件
- 另一个是输出路径
func Unzip(zipFile string, destDir string) error { zipReader, err := zip.OpenReader(zipFile) if err != nil { return err } defer zipReader.Close() for _, f := range zipReader.File { fpath := filepath.Join(destDir, f.Name) if f.FileInfo().IsDir() { os.MkdirAll(fpath, os.ModePerm) } else { if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil { return err } inFile, err := f.Open() if err != nil { return err } defer inFile.Close() outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) if err != nil { return err } defer outFile.Close() _, err = io.Copy(outFile, inFile) if err != nil { return err } } } return nil }
以上所述就是小编给大家介绍的《golang压缩和解压缩zip文件》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 基于Node.js实现压缩和解压缩的方法
- 基于Nodejs的Tcp封包和解包
- GNOME 3.36 发布,新的登录和解锁界面
- 彭博社:谷歌曾寻求与欧盟和解 Android 反垄断案
- 乐视云计算被列入失信名单;三星华为达成和解;Python3 采用率超 84% 丨 Q 新闻
- bitcoin:压缩公钥与未压缩公钥
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。