分享
  1. 首页
  2. 文章

[转]golang压缩加压

weilai · · 3554 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

压缩文件

package main
 
import (
  "fmt"
  "os"
  "io"
  "archive/tar"
  "compress/gzip"
)
 
func main() {
  // file write
  fw, err := os.Create("tar/lin_golang_src.tar.gz")
  if err != nil {
    panic(err)
  }
  defer fw.Close()
 
  // gzip write
  gw := gzip.NewWriter(fw)
  defer gw.Close()
 
  // tar write
  tw := tar.NewWriter(gw)
  defer tw.Close()
 
  // 打开文件夹
  dir, err := os.Open("file/")
  if err != nil {
    panic(nil)
  }
  defer dir.Close()
 
  // 读取文件列表
  fis, err := dir.Readdir(0)
  if err != nil {
    panic(err)
  }
 
  // 遍历文件列表
  for _, fi := range fis {
    // 逃过文件夹, 我这里就不递归了
    if fi.IsDir() {
      continue
    }
 
    // 打印文件名称
    fmt.Println(fi.Name())
 
    // 打开文件
    fr, err := os.Open(dir.Name() + "/" + fi.Name())
    if err != nil {
      panic(err)
    }
    defer fr.Close()
 
    // 信息头
    h := new(tar.Header)
    h.Name = fi.Name()
    h.Size = fi.Size()
    h.Mode = int64(fi.Mode())
    h.ModTime = fi.ModTime()
 
    // 写信息头
    err = tw.WriteHeader(h)
    if err != nil {
      panic(err)
    }
 
    // 写文件
    _, err = io.Copy(tw, fr)
    if err != nil {
      panic(err)
    }
  }
 
  fmt.Println("tar.gz ok")
}

解压缩文件

package main
 
import (
  "fmt"
  "os"
  "io"
  // "time"
  "archive/tar"
  "compress/gzip"
)
 
func main() {
  // file read
  fr, err := os.Open("tar/lin_golang_src.tar.gz")
  if err != nil {
    panic(err)
  }
  defer fr.Close()
 
  // gzip read
  gr, err := gzip.NewReader(fr)
  if err != nil {
    panic(err)
  }
  defer gr.Close()
 
  // tar read
  tr := tar.NewReader(gr)
 
  // 读取文件
  for {
    h, err := tr.Next()
    if err == io.EOF {
      break
    }
    if err != nil {
      panic(err)
    }
 
    // 显示文件
    fmt.Println(h.Name)
 
    // 打开文件
    fw, err := os.OpenFile("file2/" + h.Name, os.O_CREATE | os.O_WRONLY, 0644/*os.FileMode(h.Mode)*/)
    if err != nil {
      panic(err)
    }
    defer fw.Close()
 
    // 写文件
    _, err = io.Copy(fw, tr)
    if err != nil {
      panic(err)
    }
     
  }
 
  fmt.Println("un tar.gz ok")
}



有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:weilai

查看原文:[转]golang压缩加压

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3554 次点击
上一篇:golang调用dll
下一篇:golang 坑集
1 回复 | 直到 2019年03月11日 10:06:34
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏