你可以使用Go语言的archive/zip
包来实现将指定文件打包成一个压缩包的功能。以下是一个示例代码:
package main
import (
"archive/zip"
"fmt"
"io"
"os"
"path/filepath"
)
func ZipFiles(files []string, dest string) error {
newZipFile, err := os.Create(dest)
if err != nil {
return err
}
defer newZipFile.Close()
zipWriter := zip.NewWriter(newZipFile)
defer zipWriter.Close()
for _, file := range files {
err = addFileToZip(zipWriter, file)
if err != nil {
return err
}
}
fmt.Println("打包成功!")
return nil
}
func addFileToZip(zipWriter *zip.Writer, filename string) error {
fileToZip, err := os.Open(filename)
if err != nil {
return fmt.Errorf("无法打开文件:%s\n%v", filename, err)
}
defer fileToZip.Close()
info, err := fileToZip.Stat()
if err != nil {
return fmt.Errorf("无法获取文件信息:%s\n%v", filename, err)
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return fmt.Errorf("无法创建文件头:%s\n%v", filename, err)
}
header.Name = filepath.Base(filename)
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return fmt.Errorf("无法创建压缩文件:%s\n%v", header.Name, err)
}
io.Copy(writer, fileToZip)
return nil
}
func main() {
files := []string{
"/path/to/file1.txt",
"/path/to/file2.txt",
// 添加更多文件路径
}
dest := "/path/to/archive.zip" // 替换为你想要保存的压缩包路径和名称
err := ZipFiles(files, dest)
if err != nil {
fmt.Printf("打包失败:%v\n", err)
}
}
请确保替换files
变量中的文件路径列表和dest
变量中的压缩包路径和名称为你实际想要使用的路径和名称。函数ZipFiles
将会将指定的文件打包成一个压缩包,并保存在指定的位置。
内容由零声教学AI助手提供,问题来源于学员提问