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")
    }
  • 相关阅读:
    JavaScript与C# Windows应用程序交互
    SVG与CSS的特殊性
    Flash 仪表控件 FusionGadgets【转】
    如何获取Windows服务对应程序的所在目录
    记录几个CSS样式
    使用网络调试助手时出现 connect() failed 错误
    使用xml配置文件配置DataGridView的列信息
    javascript解析json
    iPhone开发笔记
    (转)C语言中两种方式表示时间日期值time_t和struct tm类型的相互转换
  • 原文地址:https://www.cnblogs.com/craneboos/p/8440426.html
Copyright © 2011-2022 走看看