如何解决在没有根文件夹的文件夹内压缩内容
Zipit("dir1/", "dir1.zip")
您需要做的就是删除baseDir
正在添加到存档内文件名的文件。
您目前有以下代码:
if baseDir != "" {
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
}
baseDir
这是dir1
。
只需省略baseDir
(但继续修饰前缀):
header.Name = strings.TrimPrefix(path, source)
这与用不同名称解压缩工件非常相似,您需要做的只是header.Name
根据需要进行修改。听起来您需要检查各种filepath
功能,以了解它们如何为您提供帮助。
解决方法
我想将内容中的某些目录压缩为zip文件
例如假设我有这个目录结构
dir1
file1.html
file2.go
现在我想将其压缩到dir1.zip
哪个正在工作
当我解压缩它时,我得到了相同的结构…我想将 内容 压缩 到其中 ,当我解压缩它时,提取文件后,我得到的文件里面没有root文件夹dir1
file1.html
file2.go
我尝试使用此代码处理路径,但是它不起作用,我在这里错过了什么吗?
我试过了
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
}
var baseDir string
if info.IsDir() {
baseDir = filepath.Base(source)
}
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 baseDir != "" {
header.Name = filepath.Join(baseDir,strings.TrimPrefix(path,source))
}
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
}
dir.Zipit("path/dir1" +"/","test"+".zip")
或者也许GO中有更简单的方法来实现这一目标?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。