在go语言中实现压缩文件功能示例
Go  /  管理员 发布于 1年前   311
Go的标准库支持多种压缩文件格式。Zip 格式是最常见的压缩文件标准。
在 Go 中创建/压缩 Zip 文件非常简单。
您需要导入的包是
archive/zip
下面是一个压缩文件的简单 Go 程序。
注意:
默认压缩级别为 0(存储),你必须将压缩算法改为 deflate(数字 8)。
否则,创建的压缩文件会稍大一些!
示例代码:
go-zip.go
package main
import (
"archive/zip"
"flag"
"fmt"
"io"
"os"
)
// 如果打算使用自己的压缩算法,请使用 RegisterCompressor
// 除了标准算法 8(deflate)
// 由于本示例中没有使用 init 块,因此将其注释掉
//func init() {
// 参见 https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT
// 第 4.4.5 节中的可用压缩方法......Golang 没有实现这些方法....
// 只有算法 0 和数字 8(deflate)可用
// var comp zip.Compressor
// zip.RegisterCompressor(999, comp)
//}
func main() {
flag.Parse()
filename := flag.Arg(0)
if filename == "" {
fmt.Println("Usage go-zip sourcefile")
os.Exit(1)
}
fmt.Printf("Zipping file. \n")
err := zipfile(filename)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Println("Zipped to ", filename+".zip")
}
func zipfile(filename string) error {
newfile, err := os.Create(filename + ".zip")
if err != nil {
return err
}
defer newfile.Close()
zipit := zip.NewWriter(newfile)
defer zipit.Close()
zipfile, err := os.Open(filename)
if err != nil {
return err
}
defer zipfile.Close()
// 获取文件信息
info, err := zipfile.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
// 默认为存储 0(无压缩!)。
// forking important !
// Change to deflate
// 参见 http://golang.org/pkg/archive/zip/#pkg-constants
header.Method = zip.Deflate
writer, err := zipit.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, zipfile)
return err
}
测试 go-zip.go
>go run go-zip.go [filename]
参考:
http://golang.org/pkg/archive/zip/
相关链接 :
在go语言中实现解压文件功能示例
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号