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")
    }
  • 相关阅读:
    Jaeger Client Go 链路追踪|入门详解
    Go 中的 gRPC 入门详解
    【五分钟】001-数据结构概论
    【重榜?】.NET 6 Preview 1 开箱上手!带你尝试新版本更新!
    分布式链路追踪框架的基本实现原理
    【网摘】SQL练习题
    【数据库】E-R图向关系模型转换的规则
    6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)
    【数据库】入门基础概念以及部分题目 记录 +答案+个人分析
    5.0 数据库完整性详解(PRIMARY KEY、REFERENCES、CHECK、CONSTRAINT、DOMAIN、TRIGGER)
  • 原文地址:https://www.cnblogs.com/craneboos/p/8440426.html
Copyright © 2011-2022 走看看