如何解压单个文件?

How to unzip a single file?

我找到了很多关于如何从 .zip 中提取 所有 文件的示例,但我不知道如何在不遍历所有文件的情况下提取单个文件在 .zip 文件中。

是否可以在 Go 中从 .zip 存档中提取单个文件而不遍历 .zip 文件中的所有文件?

例如,如果一个 zip 文件包含:

folder1/file1.txt
folder1/file2.txt
folder1/file3.txt
folder2/file1.txt

如何只提取 folder2/file1.txt

zip.Reader provides you the content of the archive, the files as a slice (of zip.File)。没有通过名称获取文件的辅助方法,您必须使用循环遍历文件。您不需要打开/提取文件,但要按名称查找文件,您必须使用循环。

例如:

r, err := zip.OpenReader("testdata/readme.zip")
if err != nil {
    log.Fatal(err)
}
defer r.Close()

for _, f := range r.File {
    if f.Name != "folder2/file1.txt" {
        continue
    }

    // Found it, print its content to terminal:
    rc, err := f.Open()
    if err != nil {
        log.Fatal(err)
    }
    _, err = io.Copy(os.Stdout, rc)
    if err != nil {
        log.Fatal(err)
    }
    rc.Close()
    fmt.Println()
    break
}