之前写过一篇关于解压缩的博文,压缩zip和解压缩unzip,但显然其并不是很好用,这里发现之前的Go库管理工具gopm中,实现的解压缩包,算是封装的很好用的zip包了。(这个库是无闻大佬写的,感谢!!!)
这里是地址。
包 zip
(Go Walker) 和 tz
(Go Walker) 都允许你轻易的读取或写入 ZIP/TAR.GZ 压缩档案和其内部文件。
- 特性:
- 将任意位置的文件或目录加入档案,没有一对一的操作限制。
- 只解压部分文件,而非一次性解压全部。
- 将数据以流的形式直接写入
io.Writer
而不需经过文件系统的存储。
实例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| func main() {
zipArchive, err := zip.Create("one.zip") if err != nil { fmt.Println(err) return }
err = zipArchive.AddDir("/one/test", "E:\\Project\\testCae\\ones") if err != nil { fmt.Println(err) return } err = zipArchive.Flush() if err != nil { fmt.Println(err) return }
err = zipArchive.Close() if err != nil { fmt.Println(err) return } }
|
创建一个Zip的实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| // 打开一个ZIP包,选择打开的方式[os.O_RDWR|os.O_CREATE|os.O_TRUNC],返回zip句柄 func OpenFile(name string, flag int, perm os.FileMode) (*ZipArchive, error) { z := new(ZipArchive) err := z.Open(name, flag, perm) return z, err }
// 新建zip句柄 func Create(name string) (*ZipArchive, error) { os.MkdirAll(path.Dir(name), os.ModePerm) return OpenFile(name, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0666) }
// 以只读的方式打开zip包 func Open(name string) (*ZipArchive, error) { return OpenFile(name, os.O_RDONLY, 0) }
|
获得句柄后,进行zip相关操作。
库中有一个中间函数type HookFunc func(string, os.FileInfo) error
,传入的参数是filename,和,file的信息。用于在压缩或者解压每一个文件时,若需要做相应的处理,则传入这个自定义函数即可。
详细到每个函数使用,可以直接查看zip_test.go。更为详细了解整个操作。
本文标题:golang实现的zip实用库
文章作者:小师
发布时间:2020-09-23
最后更新:2022-05-04
原始链接:chunlife.top/2020/09/23/golang实现的zip实用库/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可