go 压缩文件操作

来源:互联网 发布:linux连接数 编辑:程序博客网 时间:2024/06/05 18:51

go 压缩文件操作

import (    "archive/zip"    "bytes"    "io"    "io/ioutil"    "os"    "path/filepath")// unzip 解压文件 archive zip文件路径,target 解压路径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}// isZip 判定是不是zip文件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"))}// CompressZip 压缩文件 target:压缩后的文件路径 target:要压缩文件的路径func CompressZip(archive, target string) error {    //获取源文件列表    f, err := ioutil.ReadDir(target)    if err != nil {        return err    }    fzip, _ := os.Create(archive)    w := zip.NewWriter(fzip)    defer w.Close()    for _, file := range f {        fw, _ := w.Create(file.Name())        filecontent, err := ioutil.ReadFile(target + file.Name())        if err != nil {            return err        }        _, err = fw.Write(filecontent)        if err != nil {            return err        }    }    return nil}

压缩文件包推荐

https://github.com/mholt/archiver
import "github.com/mholt/archiver"// 压缩文件err := archiver.Zip.Make("output.zip", []string{"file.txt", "folder"})// 判断文件是不是zip压缩包isZip := archiver.Zip.Match("input.zip")if isZip {    fmt.Println("此文件不是压缩包")    return}// 解压文件err := archiver.Zip.Open("input.zip", "output_folder")