You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.7 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package main
import (
"archive/zip"
"io"
"os"
"path/filepath"
log "github.com/sirupsen/logrus"
)
// 桌面应用升级方案,桌面应用更新研发
// https://blog.csdn.net/u012981972/article/details/109597211
// 自动解压
func Unzip(zipFile string, destDir string) error {
defer func() {
if r := recover(); r != nil {
log.Error("Unzip:", r)
}
}()
zipReader, err := zip.OpenReader(zipFile)
if err != nil {
log.Println("打开文件失败:" + err.Error())
return err
}
//defer的使用规则:1.当defer被声明时其参数就会被实时解析;2.defer执行顺序为先进后出;3. defer可以读取有名返回值
defer zipReader.Close()
for _, f := range zipReader.File {
fpath := filepath.Join(destDir, f.Name)
if f.FileInfo().IsDir() {
os.MkdirAll(fpath, os.ModePerm)
} else {
if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
log.Println("创建文件夹失败:" + err.Error())
return err
}
inFile, err := f.Open()
if err != nil {
log.Println("文件打开失败:" + err.Error())
return err
}
defer inFile.Close()
outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
if err != nil {
log.Println("复制错误:" + err.Error())
return err
}
defer outFile.Close()
_, err = io.Copy(outFile, inFile)
if err != nil {
log.Println("复制失败:" + err.Error())
return err
}
}
}
return nil
}
func init() {
defer func() {
if r := recover(); r != nil {
log.Error("init:", r)
}
}()
logFile, err := os.OpenFile("log.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
return
}
log.SetOutput(logFile)
// log.SetPrefix("[update]")
}