GO zip.NewWriter()创建空的zip档案

时间:2019-04-04 22:10:22

标签: go 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
}

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

1 个答案:

答案 0 :(得分:0)

@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
}