愉快的使用cursor

This commit is contained in:
zeaslity
2025-02-26 09:25:24 +08:00
parent 60a1849207
commit b8170e00d4
11 changed files with 554 additions and 89 deletions

150
agent-wdd/utils/ZipUtils.go Normal file
View File

@@ -0,0 +1,150 @@
package utils
import (
"agent-wdd/log"
"archive/tar"
"archive/zip"
"compress/gzip"
"io"
"os"
"path/filepath"
)
// UnzipFile 解压文件, 支持zip和tar.gz
func UnzipFile(zipFile string, targetFolder string) {
// 检查文件扩展名以确定解压缩方法
fileExt := filepath.Ext(zipFile)
switch fileExt {
case ".zip":
// 使用标准库中的archive/zip包进行解压缩
zipReader, err := zip.OpenReader(zipFile)
if err != nil {
log.Error("无法打开ZIP文件: %s, 错误: %s", zipFile, err.Error())
return
}
defer zipReader.Close()
// 创建目标文件夹
if err := os.MkdirAll(targetFolder, 0755); err != nil {
log.Error("无法创建目标文件夹: %s, 错误: %s", targetFolder, err.Error())
return
}
// 遍历ZIP文件中的所有文件
for _, file := range zipReader.File {
zippedFile, err := file.Open()
if err != nil {
log.Error("无法打开ZIP中的文件: %s, 错误: %s", file.Name, err.Error())
continue
}
defer zippedFile.Close()
// 构建目标文件路径
targetFilePath := filepath.Join(targetFolder, file.Name)
// 如果是目录,则创建目录
if file.FileInfo().IsDir() {
if err := os.MkdirAll(targetFilePath, file.Mode()); err != nil {
log.Error("无法创建目录: %s, 错误: %s", targetFilePath, err.Error())
continue
}
} else {
// 如果是文件,则创建文件并写入内容
if err := os.MkdirAll(filepath.Dir(targetFilePath), 0755); err != nil {
log.Error("无法创建文件的父目录: %s, 错误: %s", filepath.Dir(targetFilePath), err.Error())
continue
}
targetFile, err := os.OpenFile(targetFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
if err != nil {
log.Error("无法创建目标文件: %s, 错误: %s", targetFilePath, err.Error())
continue
}
defer targetFile.Close()
if _, err := io.Copy(targetFile, zippedFile); err != nil {
log.Error("无法写入文件内容: %s, 错误: %s", targetFilePath, err.Error())
continue
}
}
}
case ".tar", ".tar.gz", ".tgz":
// 使用标准库中的archive/tar包进行解压缩
var file *os.File
var err error
if fileExt == ".tar.gz" || fileExt == ".tgz" {
file, err = os.Open(zipFile)
if err != nil {
log.Error("无法打开TAR.GZ文件: %s, 错误: %s", zipFile, err.Error())
return
}
defer file.Close()
gzipReader, err := gzip.NewReader(file)
if err != nil {
log.Error("无法创建GZIP读取器: %s, 错误: %s", zipFile, err.Error())
return
}
defer gzipReader.Close()
tarReader := tar.NewReader(gzipReader)
if err := extractTar(tarReader, targetFolder); err != nil {
log.Error("解压TAR.GZ文件时出错: %s, 错误: %s", zipFile, err.Error())
return
}
} else {
file, err = os.Open(zipFile)
if err != nil {
log.Error("无法打开TAR文件: %s, 错误: %s", zipFile, err.Error())
return
}
defer file.Close()
tarReader := tar.NewReader(file)
if err := extractTar(tarReader, targetFolder); err != nil {
log.Error("解压TAR文件时出错: %s, 错误: %s", zipFile, err.Error())
return
}
}
default:
log.Error("不支持的文件类型: %s", fileExt)
return
}
}
// 辅助函数用于解压TAR文件
func extractTar(tarReader *tar.Reader, targetFolder string) error {
for {
header, err := tarReader.Next()
if err == io.EOF {
break
}
if err != nil {
return err
}
targetFilePath := filepath.Join(targetFolder, header.Name)
switch header.Typeflag {
case tar.TypeDir:
if err := os.MkdirAll(targetFilePath, 0755); err != nil {
return err
}
case tar.TypeReg:
if err := os.MkdirAll(filepath.Dir(targetFilePath), 0755); err != nil {
return err
}
file, err := os.OpenFile(targetFilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, os.FileMode(header.Mode))
if err != nil {
return err
}
defer file.Close()
if _, err := io.Copy(file, tarReader); err != nil {
return err
}
}
}
return nil
}