gpt4 book ai didi

ubuntu - 在golang中提取tarball时丢失文件

转载 作者:行者123 更新时间:2023-12-04 18:56:50 25 4
gpt4 key购买 nike

我正在尝试使用此功能在解压缩文件后解压缩文件,但是,当它解压缩时,缺少一些文件夹,我不知道为什么。当我通过 GUI 打开创建的 tar 文件时,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
}
这是我应该得到的: want
这就是我所拥有的: have

最佳答案

这是一些示例代码:

package main

import (
"archive/tar"
"compress/gzip"
"io"
"os"
"path"
)

func extract(source string) error {
file, err := os.Open(source)
if err != nil { return err }
defer file.Close()
gzRead, err := gzip.NewReader(file)
if err != nil { return err }
defer gzRead.Close()
tarRead := tar.NewReader(gzRead)
for {
cur, err := tarRead.Next()
if err == io.EOF { break } else if err != nil { return err }
os.MkdirAll(path.Dir(cur.Name), os.ModeDir)
switch cur.Typeflag {
case tar.TypeReg:
create, err := os.Create(cur.Name)
if err != nil { return err }
defer create.Close()
create.ReadFrom(tarRead)
case tar.TypeLink:
os.Link(cur.Linkname, cur.Name)
}
}
return nil
}
用法:
package main

func main() {
extract("clamav-0.103.1.tar.gz")
}

关于ubuntu - 在golang中提取tarball时丢失文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66681108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com