Compare commits

...

2 Commits

  1. 32
      scagent/util/fsutil.go

32
scagent/util/fsutil.go

@ -288,17 +288,6 @@ func DecompressZip(zpFname string, dirpath string) error {
os.MkdirAll(filePath, os.ModePerm) os.MkdirAll(filePath, os.ModePerm)
continue continue
} }
// 文件存在先备份再覆盖
if _, err := os.Stat(filePath); err == nil {
// 当前时间
currentTime := time.Now().Format("20060102_150405")
// 备份文件
backupPath := filePath + currentTime + "_bak"
if err := os.Rename(filePath, backupPath); err != nil {
return fmt.Errorf("failed to backup file (%v)", err)
}
continue
}
// 父文件夹开始创建目录 // 父文件夹开始创建目录
if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil { if err := os.MkdirAll(filepath.Dir(filePath), os.ModePerm); err != nil {
return fmt.Errorf("failed to make directory (%v)", err) return fmt.Errorf("failed to make directory (%v)", err)
@ -308,15 +297,32 @@ func DecompressZip(zpFname string, dirpath string) error {
if err != nil { if err != nil {
return fmt.Errorf("failed to create file (%v)", err) return fmt.Errorf("failed to create file (%v)", err)
} }
defer dstFile.Close()
// 打开zip文件中的文件
fileInArchive, err := f.Open() fileInArchive, err := f.Open()
if err != nil { if err != nil {
return fmt.Errorf("failed to open file in zip (%v)", err) return fmt.Errorf("failed to open file in zip (%v)", err)
} }
defer fileInArchive.Close()
// 检查文件是否存在,存在的话先备份
if _, err := os.Stat(filePath); err == nil {
// 当前时间
currentTime := time.Now().Format("20060102_150405")
// 备份文件
backupPath := filePath + currentTime + "_bak"
if err := os.Rename(filePath, backupPath); err != nil {
return fmt.Errorf("failed to backup file (%v)", err)
}
}
// 复制文件到目标路径
if _, err := io.Copy(dstFile, fileInArchive); err != nil { if _, err := io.Copy(dstFile, fileInArchive); err != nil {
return fmt.Errorf("failed to copy file in zip (%v)", err) return fmt.Errorf("failed to copy file in zip (%v)", err)
} }
dstFile.Close() // 保留原始文件的修改时间
fileInArchive.Close() if err := os.Chtimes(filePath, f.ModTime(), f.ModTime()); err != nil {
return fmt.Errorf("failed to set file times (%v)", err)
}
// nothing
} }
return nil return nil
} }

Loading…
Cancel
Save