zip
使用方法
写
// 写到文件中
src,err := os.Create("/name.zip")
if err != nil{
return
}
w := zip.NewWriter(src)
// 给写入的文件写名字,Create()函数,默认的压缩方式是deflate,需要选择压缩方式可以用CreateHeader()
// Store uint16 = 0 // no compression
// Deflate uint16 = 8 // DEFLATE compressed
f,err := w.Create("name")
if err != nil{
return
}
//将内容写入相应的文件中,data是二进制字节流
_,err:=f.write(data)
if err != nil {
return
}
// 写完后,需要注意关闭w
w.Close()
err := w.Close()
if err != nil {
log.Fatal(err)
}
读(常用就是解压缩)
// OpenReader 打开要读取的zip,path:zip文件路径
rc ,err := zip.OpenReader(Path)
if err == nil {
defer rc.Close()
}
for _f,:= range rc.File{
rc,err := f.Open()
if err != nil{
return
}
//创建新的文件用来接收数据
f,err := os.Create("./")
if err != nil{
return
}
defer f.Close()
_,err := io.Copy(f,rc)
if err != nil{
return
}
}
源码分析
源码太牛了,慢慢解读中
tar
使用方法
写
f, err := os.Create("tarr.tar")
if err != nil {
log.Fatal(3, err)
}
defer f.Close()
wt := tar.NewWriter(f)
defer wt.Close()
write(wt, "readme.txt")
write(wt, "todo.txt")
// tw tar.Writer的指针对象,name 需要进入压缩包的文件
func write(tw *tar.Writer, name string) {
//读取文件信息
of, err := os.Open(name)
if err != nil {
log.Fatal(err)
}
defer of.Close()
info, err := of.Stat()
if err != nil {
log.Fatal(err)
}
head, err := tar.FileInfoHeader(info, "")
if err != nil {
log.Fatal(err)
}
tw.WriteHeader(head)
_, err = io.Copy(tw, of)
if err != nil {
log.Fatal(1, err)
}
}
解压缩
f, err := os.Open("tarr.tar")
if err != nil {
log.Fatal(err)
}
defer f.Close()
tr := tar.NewReader(f)
for {
head, err := tr.Next()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
fi := head.FileInfo()
f, err := os.Create(fi.Name())
if err != nil {
log.Fatal(err)
}
io.Copy(f, tr)
os.Chmod(fi.Name(), fi.Mode().Perm())
f.Close()
}
源码分析
源码太牛了,慢慢解读中