美文网首页golang
golang文件的压缩与解压

golang文件的压缩与解压

作者: 吃猫的鱼0 | 来源:发表于2018-01-08 15:29 被阅读0次

判断是否是zip文件

package main

import (
    "bytes"
    "fmt"
    "os"
)

func isZip(zipPath string) bool {
    f, err := os.Open(zipPath)
    if err != nil {
        return false
    }
    defer f.Close()

    buf := make([]byte, 4)
    if n, err := f.Read(buf); err != nil || n < 4 {
        return false
    }

    return bytes.Equal(buf, []byte("PK\x03\x04"))
}

func main() {
    result := isZip("1.zip")
    fmt.Println(result)
}

解压缩zip文件

package main

import (
    "archive/zip"
    "bytes"
    "fmt"
    "io"
    "os"
    "path/filepath"
)

func unzip(archive, target string) error {
    reader, err := zip.OpenReader(archive)
    if err != nil {
        return err
    }

    if err := os.MkdirAll(target, 0755); err != nil {
        return err
    }

    for _, file := range reader.File {
        path := filepath.Join(target, file.Name)
        if file.FileInfo().IsDir() {
            os.MkdirAll(path, file.Mode())
            continue
        }

        fileReader, err := file.Open()
        if err != nil {
            return err
        }
        defer fileReader.Close()

        targetFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
        if err != nil {
            return err
        }
        defer targetFile.Close()

        if _, err := io.Copy(targetFile, fileReader); err != nil {
            return err
        }
    }

    return nil
}

func main() {
    result := isZip("1.zip")
    fmt.Println(result)
    unzip("1.zip", "./")
}

压缩成zip文件

package main

import (
    "archive/zip"
    "bytes"
    "log"
    "os"
)

func main() {
    buf := new(bytes.Buffer)

    w := zip.NewWriter(buf)

    var files = []struct {
        Name, Body string
    }{
        {"1.txt", "first"},
        {"2.txt", "second"},
        {"3.txt", "third"},
    }
    for _, file := range files {
        f, err := w.Create(file.Name)
        if err != nil {
            log.Fatal(err)
        }
        _, err = f.Write([]byte(file.Body))
        if err != nil {
            log.Fatal(err)
        }
    }

    err := w.Close()
    if err != nil {
        log.Fatal(err)
    }

    f, err := os.OpenFile("file.zip", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        log.Fatal(err)
    }
    buf.WriteTo(f)
}

相关文章

  • golang文件的压缩与解压

    判断是否是zip文件 解压缩zip文件 压缩成zip文件

  • golang压缩和解压缩zip文件

    golang压缩和解压缩zip文件 一个简单例子说明如何使用golang提供的archive/zip包实现zip文...

  • Linux(ubuntu)安装软件

    在Linux安装软件前,首先要了解压缩与解压缩。 压缩与解压缩 zip / unzip可以对多个文件和目录进行压缩...

  • 4、Linux压缩命令

    压缩与解压缩命令 gzip 使用gzip程序压缩/解压缩文件,文件扩展名以 .gz 结尾 zcat 查看以gzip...

  • 11月1日

    今天继续学习shell指令 主要是链接文件创建 与文件的压缩与解压 理解什么是硬链接与软链接 重点是压缩文件与解压...

  • linux常用命令

    压缩与解压文件 zip zip -r ./.zip ./*压缩当前文件夹下所有文件 -r代表递归压缩,...

  • zip压缩工具、tar打包、tar打包并压缩

    65 zip压缩工具 支持压缩目录 默认不支持解压windows下的rar文件 压缩、解压缩文件 压缩、解压缩目录...

  • 源码安装 golang

    下载地址:https://golang.org/dl/ 下载压缩包 解压该文件,默认的go路径在/usr/loca...

  • 10.压缩解压类

    压缩和解压类 压缩指令gzip,解压缩指令gunzipgzip 文件 // 压缩文件,只能压缩成....

  • linux压缩解压

    zip压缩解压 压缩文件 压缩目录 unzip解压缩 不重建文档的目录结构,把所有文件解压到同一目录下 将压缩文件...

网友评论

    本文标题:golang文件的压缩与解压

    本文链接:https://www.haomeiwen.com/subject/rcsbnxtx.html