|
|
@ -297,10 +297,13 @@ 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 { |
|
|
if _, err := os.Stat(filePath); err == nil { |
|
|
// 当前时间
|
|
|
// 当前时间
|
|
|
@ -315,8 +318,11 @@ func DecompressZip(zpFname string, dirpath string) error { |
|
|
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 |
|
|
} |
|
|
} |
|
|
|