我编写了一个将zip存档读取到map[string]*zip.File
的功能。
func ReadZip(file string) (map[string]*zip.File, error) {
r, err := zip.OpenReader(file)
if err != nil {
return nil, err
}
defer r.Close()
files := make(map[string]*zip.File)
for _, f := range r.File {
files[f.Name] = f
}
return files, nil
}
但是当我尝试打开文件infoRC, err := f["info.json"].Open()
时出现错误
读取file.zip:错误的文件描述符。
是否有更好的方法来读取zip存档?
答案 0 :(得分:3)
一旦调用ReadCloser.Close
,任何*zip.File
结构均无效:
关闭会关闭Zip文件,使其无法用于I / O。
您需要:
r
,或者后一种选择的示例:
func ReadZip(file string) (map[string][]byte, error) {
r, err := zip.OpenReader(file)
if err != nil {
return nil, err
}
defer r.Close()
files := make(map[string][]byte)
for _, f := range r.File {
fc, err := f.Open()
if err != nil {
return nil, err
}
contents, err := ioutil.ReadAll(fc)
fc.Close()
if err != nil {
return nil, err
}
files[f.Name] = contents
}
return files, nil
}