如何解压单个文件?
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
}
我找到了很多关于如何从 .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
}