一尘不染

如何解压缩单个文件?

go

我已经找到了许多有关如何从.zip中提取 所有 文件的示例,但是我不知道如何在不迭代.zip文件中的所有文件的情况下提取单个文件。

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

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

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

我将只提取 folder2/file1.txt吗?


阅读 270

收藏
2020-07-02

共1个答案

一尘不染

zip.Reader为您提供的归档文件的内容,这些文件作为

(的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
}
2020-07-02