不多BB,直接上代码了
package main
import (
"archive/zip"
"io"
"log"
"os"
"fmt"
"path/filepath"
)
//DeCompress 解压文件 返回解压的目录
func DeCompress(zipFile, dest string) (string,error) {
// 打开zip文件
reader, err := zip.OpenReader(zipFile)
if err != nil {
return "", err
}
defer func() {
err := reader.Close()
if err != nil{
log.Fatalf("[unzip]: close reader %s", err.Error())
}
}()
var(
first string // 记录第一次的解压的名字
order int = 0
)
for _, file := range reader.File{
rc, err := file.Open()
if err != nil {
return "", err
}
filename := filepath.Join(dest, file.Name)
//记录第一次的名字
if order == 0 {
first = filename
}
order += 1
//fmt.Println(getDir(filename))
if file.FileInfo().IsDir() {
err = os.MkdirAll(filename, 0755)
if err != nil {
return "", err
}
}else{
w, err := os.Create(filename)
if err != nil {
return "", err
}
//defer w.Close()
_, err = io.Copy(w, rc)
if err != nil {
return "", err
}
iErr := w.Close()
if iErr!=nil{
log.Fatalf("[unzip]: close io %s", iErr.Error())
}
fErr := rc.Close()
if fErr!=nil{
log.Fatalf("[unzip]: close io %s", fErr.Error())
}
}
}
return first,nil
}
func main() {
endResult, err := DeCompress("/app/goland/tmp/01/redis009.zip", "/app/goland/tmp/01/out/")
if err != nil {
fmt.Println(err.Error())
}else{
fmt.Println(endResult)
}
}
测试
- 运行代码
运行环境 (1)操作系统 centos 7 (2)go1.15
- 查看结果
感慨Python在功能实现方面还是很方便的