【发布时间】:2021-03-17 20:57:17
【问题描述】:
我正在尝试使用此功能在解压缩文件后解压缩文件,但是,当它解压缩时,缺少一些文件夹,我不知道为什么。当我通过 GUI 打开创建的 tarfile 时,UnGzip 工作正常,因此不包含该功能。
func main() {
fileUrl := "https://www.clamav.net/downloads/production/clamav-0.103.1.tar.gz"
filePath := "clamav-0.103.1.tar.gz"
tempFolder := "temp"
err := os.Mkdir(tempFolder, 0755)
if err != nil {
panic(err)
}
err = DownloadFile(filePath, fileUrl)
if err != nil {
panic(err)
}
fmt.Println("Downloaded: " + fileUrl)
UnGzip(filePath,tempFolder + "/clamav.tar")
UnTar(tempFolder + "/clamav.tar",tempFolder + "/clamAV/")
//err := os.RemoveAll("tempFolder")
//if err != nil {
//panic(err)
//}
}
func UnTar(tarball, target string) error {
reader, err := os.Open(tarball)
if err != nil {
return err
}
defer reader.Close()
tarReader := tar.NewReader(reader)
for {
header, err := tarReader.Next()
if err == io.EOF {
break
} else if err != nil {
return err
}
path := filepath.Join(target, header.Name)
info := header.FileInfo()
if info.IsDir() {
if err = os.MkdirAll(path, info.Mode()); err != nil {
return err
}
continue
}
file, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, info.Mode())
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(file, tarReader)
if err != nil {
return err
}
}
return nil
}
【问题讨论】:
-
存档目录并不总是与文件分开列出。尝试在不存在的目录中创建文件时是否出现错误?
-
@jimB 没有错误,我确定目录存在
-
我不明白,你说一些文件夹/目录丢失了——但你确定它们存在?
-
我的错我以为你的意思是父目录,不应该使用 mkdirAll 创建文件夹吗? (我更新了问题以包含我获取的文件与我需要的文件的图片)如果文件试图安装在不存在的文件夹中存在问题,它不会创建任何文件夹而不是只获得一个几个文件夹,而且我仍然没有得到一些甚至不在父目录中的文件
-
这个 tarball 似乎单独列出了所有目录,但您应该注意这一点。您没有检查从
UnTar返回的错误,它会告诉您这里出了什么问题。经常检查你的错误。