登录
首页 >  Golang >  Go问答

在没有根文件夹的文件夹内压缩内容

来源:Golang技术栈

时间:2023-03-23 08:36:39 176浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《在没有根文件夹的文件夹内压缩内容》主要内容涉及到golang等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我想将内容中的一些目录压缩到 zip 文件中

例如假设我是这个目录结构

dir1
  file1.html
  file2.go

现在我想把它压缩到dir1.zip正在工作的地方

当我提取它时,我得到了相同的结构...我想将 内容 压缩在里面

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)

[这与解压缩具有不同名称的工件](https://stackoverflow.com/questions/48732412/unzip-artifacts- with-different- name)非常相似,您需要做的就是根据需要进行修改header.Name。听起来您需要检查各种filepath功能以了解它们如何为您提供帮助。

好了,本文到此结束,带大家了解了《在没有根文件夹的文件夹内压缩内容》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>