如何使用Golang解压tar文件?
时间: 2024-03-31 12:28:50 浏览: 139
以下是使用Golang解压tar文件的方法:
```go
package main
import (
"archive/tar"
"compress/gzip"
"fmt"
"io"
"os"
"path/filepath"
)
func main() {
// 打开tar.gz文件
file, err := os.Open("file.tar.gz")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
// 创建gzip.Reader
gzipReader, err := gzip.NewReader(file)
if err != nil {
fmt.Println("创建gzip.Reader失败:", err)
return
}
defer gzipReader.Close()
// 创建tar.Reader
tarReader := tar.NewReader(gzipReader)
// 遍历tar文件中的每个文件
for {
header, err := tarReader.Next()
if err == io.EOF {
break
}
if err != nil {
fmt.Println("读取tar文件失败:", err)
return
}
// 获取文件路径
target := header.Name
// 判断文件类型
switch header.Typeflag {
case tar.TypeDir:
// 如果是文件夹,创建文件夹
err = os.MkdirAll(target, 0755)
if err != nil {
fmt.Println("创建文件夹失败:", err)
return
}
case tar.TypeReg:
// 如果是文件,创建文件并写入内容
file, err := os.Create(target)
if err != nil {
fmt.Println("创建文件失败:", err)
return
}
defer file.Close()
_, err = io.Copy(file, tarReader)
if err != nil {
fmt.Println("写入文件内容失败:", err)
return
}
default:
fmt.Printf("未知文件类型:%v\n", header.Typeflag)
}
}
fmt.Println("解压tar文件成功!")
}
```
阅读全文