我想将内容中的某些目录压缩为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中有更简单的方法来实现这一目标?
假设您正在按以下方式调用函数:
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
功能,以了解它们如何为您提供帮助。
问题内容: 我正在尝试压缩包含子文件夹的文件夹。尝试压缩名为10-18-2010_4D的文件夹。以上程序以以下异常结束。请提供有关如何解决此问题的建议。 问题答案: 您需要检查文件是否为目录,因为您无法将目录传递给zip方法。 看一下该页面,该页面显示了如何递归压缩给定目录。
当我在Mac OSX中使用内置的zip压缩程序压缩文件时,会在解压缩的zip中创建一个名为“_MACOSX”的额外文件夹。 我可以调整我的设置,以防止创建此文件夹,还是需要购买第三方压缩工具? 更新:我刚刚发现了一个OSX的免费应用,它解决了我的问题:“YemuZip” 更新2:YemuZip不再是免费软件。
首先,我没有看到任何其他问题可以“直接”帮助我解决问题,这就是为什么我决定创建一个新的问题。 以下代码被编程为解压缩多个文件和文件夹。 这段代码工作正常,但有一个重要的错误:它解压缩文件夹,但不是像这样显示它们: 文件1。txt 它显示了这一点: file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt 我做错了什么?
问题内容: 在特定文件夹中拥有所有需要的文件后,我希望我的python脚本压缩该文件夹中的内容。 这可能吗? 我该怎么做呢? 问题答案: 脚本的改编版本为: 例: 它创建包含目录内容的存档。
问题内容: 我尝试解压缩150个zip文件。所有zip文件都使用不同的名称,它们都分散在一个大文件夹中,该文件夹分为许多子文件夹和子子文件夹。我想将每个存档提取到与原始zip文件名相同名称的单独文件夹中,与原始zip文件位于同一位置。我的代码是: 我运行代码后,什么都没有发生。在此先感谢您的任何帮助。 问题答案: 更新: 最后,这段代码对我有用:
本文向大家介绍java实现文件夹解压和压缩,包括了java实现文件夹解压和压缩的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现文件夹解压和压缩的具体代码,供大家参考,具体内容如下 效果 实现多个文件以及文件夹的压缩和解压 代码分析 小结 压缩 ZipOutputStream可以把多份数据写入zip包; 解压 ZipInputStream可以读取zip格式的流; 以上就是本