tar 包实现了 tar 格式压缩文件的存取
func Tar() {
// 创建 ab.tar 文件
target, err := os.OpenFile("archive/tar/ab.tar", os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatalln(err)
}
defer target.Close()
tw := tar.NewWriter(target)
defer tw.Close()
files := []string{"archive/tar/a.txt", "archive/tar/b.txt"}
for _, fileName := range files {
file, err := os.Open(fileName)
if err != nil {
log.Fatalln(err)
}
fileInfo, err := file.Stat()
if err != nil {
log.Fatalln(err)
}
hdr := &tar.Header{
Name: fileName,
Size: fileInfo.Size(),
}
if err := tw.WriteHeader(hdr); err != nil {
log.Fatalln(err)
}
// 读取文件内容并写入 tar 文件
if _, err := io.Copy(tw, file); err != nil {
log.Fatalln(err)
}
file.Close()
}
}
func Untar() {
// 解压 ab.tar 文件
tarFile, err := os.Open("archive/tar/ab.tar")
if err != nil {
log.Fatalln(err)
}
defer tarFile.Close()
tr := tar.NewReader(tarFile)
for {
hdr, err := tr.Next()
if err == io.EOF {
break
}
if err != nil {
log.Fatalln(err)
}
// 打印文件名和文件内容
fmt.Printf("Contents of %s:\n", hdr.Name)
if _, err := io.Copy(os.Stdout, tr); err != nil {
log.Fatalln(err)
}
fmt.Println()
}
}