登录
首页 >  Golang >  Go问答

使用 zip.NewWriter() 创建一个新的空 zip 文件

来源:stackoverflow

时间:2024-03-24 11:45:46 351浏览 收藏

在 Go 中使用 `zip.NewWriter()` 创建一个新的空 ZIP 文件时,确保将文件添加为相对路径,使用正斜杠(`'/'`)且不能以斜杠开头。否则,生成的 ZIP 文件将为空,并且解压缩时会报错。

问题内容

我尝试将以下功能简化为仅将单个文件添加到 .zip 存档中。

无论我尝试什么,生成的 .zip 文件中都没有列出任何文件。存档的大小是正确的。但是当我尝试提取所有(窗口)时,存档是空的。

go版本go1.10.1 windows/amd64

func Zip(src string, dst string) error {
    destinationFile, err := os.Create(dst)
    if err != nil {
        return err
    }
    myZip := zip.NewWriter(destinationFile)
    file := `C:\MA\testing\cldeploy-local.json`
    zipFile, err := myZip.Create(file)

    fsFile, err := os.Open(file)
    if err != nil {
        return err
    }
    _, err = io.Copy(zipFile, fsFile)
    if err != nil {
        return err
    }
    return nil

    if err != nil {
        return err
    }
    err = myZip.Close()
    if err != nil {
        return err
    }
    return nil
}

当我解压缩文件时,出现错误消息:压缩的文件夹...无效。


解决方案


正如@jimb回答的:文件需要添加为相对路径 仅正斜杠。不能以斜线开头

func Zip(src string, dst string) error {
    destinationFile, err := os.Create(dst)
    if err != nil {
        return err
    }
    myZip := zip.NewWriter(destinationFile)
    file := `C:\MA\testing\cldeploy-local.json`

        // file needs to be added as relative path
        // only forward slashes. can not start with slash
        relPath := strings.TrimPrefix(file, filepath.Dir(src))
        relPath = strings.Replace(relPath, `\`, `/`, -1)
        relPath = strings.TrimLeft(relPath, `/`)

    zipFile, err := myZip.Create(relPath)

    fsFile, err := os.Open(file)
    if err != nil {
        return err
    }
    _, err = io.Copy(zipFile, fsFile)
    if err != nil {
        return err
    }
    return nil

    if err != nil {
        return err
    }
    err = myZip.Close()
    if err != nil {
        return err
    }
    return nil
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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