zoukankan      html  css  js  c++  java
  • 压缩文件和解压文件

    压缩文件:

    复制代码代码如下:
    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")
    }
  • 相关阅读:
    【初学EXT】布局练习
    创建型模式总结(补充UML类图)
    数据库基本概念总结
    Word2010操作技巧总结
    VMWare虚拟机磁盘压缩和上网总结
    第一次用word2010发布文章到博客园记
    设计模式学习总结一原则及创建型模式
    为什么要开始写blog?
    Delphi异常处理总结
    设计模式总结之行为型模式
  • 原文地址:https://www.cnblogs.com/craneboos/p/8440426.html
Copyright © 2011-2022 走看看