archive/tar


tar 包实现了 tar 格式压缩文件的存取

  • 打包 a.txt b.txt 到 ab.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()
	}
}
  • 解压 ab.tar

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()
	}
}
如有疑问关注公众号给我留言
wx

关注公众号

©2017-2023 鲁ICP备17023316号-1 Powered by Hugo