在没有根文件夹的情况下压缩文件夹中的内容
要求是创建一个包含目录中文件的 ZIP 文件,不包括目录本身作为提取时的根文件夹。
提供的代码片段尝试通过使用以下内容设置标头名称来实现此目的line:
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
但是,此代码将基本目录(例如“dir1”)添加到标头名称,生成一个档案,其中文件嵌套在目录结构中。
要解决此问题,应将该行替换为以下:
header.Name = strings.TrimPrefix(path, source)
这将从标头名称中删除基本目录,确保提取文件时不带目录结构。
修改后的代码如下所示:
import ( "archive/zip" "fmt" "io" "os" "path/filepath" ) func Zipit(source, target string) error { zipfile, err := os.Create(target) if err != nil { return err } defer zipfile.Close() archive := zip.NewWriter(zipfile) defer archive.Close() info, err := os.Stat(source) if err != nil { return nil } filepath.Walk(source, func(path string, info os.FileInfo, err error) error { if err != nil { return err } header, err := zip.FileInfoHeader(info) if err != nil { return err } if info.IsDir() { header.Name = "/" } else { header.Method = zip.Deflate } writer, err := archive.CreateHeader(header) if err != nil { return err } if info.IsDir() { return nil } file, err := os.Open(path) if err != nil { return err } defer file.Close() _, err = io.Copy(writer, file) return err }) return err } func main() { err := Zipit("path/dir1" "/", "test" ".zip") if err != nil { fmt.Println(err) } }
此代码有效地压缩“dir1”目录中的内容,而不将目录本身包含在 ZIP 文件中。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3