Go语言压缩文件读写之tar包

  发布时间:2025-11-04 04:07:44   作者:玩站小弟   我要评论
tar包实现了tar格式压缩文件的存取。本包目标是覆盖大多数tar的变种,包括GNU和BSD生成的tar文件。压缩文件读写常用函数和方法:func NewWriter(w io.Writer) *Wr。

  tar包实现了tar格式压缩文件的语言压缩存取。本包目标是文件覆盖大多数tar的变种,包括GNU和BSD生成的读写tar文件。

  压缩文件读写常用函数和方法:

func NewWriter(w io.Writer) *Writer

  NewWriter创建一个写入w的语言压缩*Writer。

func FileInfoHeader(fi os.FileInfo,文件 link string) (*Header, error)

  FileInfoHeader返回一个根据fi填写了部分字段的Header。 如果fi描述一个符号链接,读写FileInfoHeader函数将link参数作为链接目标。语言压缩如果fi描述一个目录,文件会在名字后面添加斜杠。读写因为os.FileInfo接口的语言压缩Name方法只返回它描述的文件的无路径名,有可能需要将返回值的文件Name字段修改为文件的高防服务器完整路径名。

func (tw *Writer) WriteHeader(hdr *Header) error

  WriteHeader写入hdr并准备接受文件内容。读写如果不是语言压缩第一次调用本方法,会调用Flush。文件在Close之后调用本方法会返回ErrWriteAfterClose。读写

func (tw *Writer) Write(b []byte) (n int, err error)

  Write向tar档案文件的当前记录中写入数据。如果写入的数据总数超出上一次调用WriteHeader的参数hdr.Size字节,返回ErrWriteTooLong错误。

func (tw *Writer) Flush() error

  Flush结束当前文件的写入。(可选的)

func (tw *Writer) Close() error

  Close关闭tar档案文件,会将缓冲中未写入下层的io.Writer接口的数据刷新到下层。

func NewReader(r io.Reader) *Reader

  NewReader创建一个从r读取的亿华云计算Reader。

func (tr *Reader) Next() (*Header, error)

  转入tar档案文件下一记录,它会返回下一记录的头域。

func (tr *Reader) Read(b []byte) (n int, err error)

  从档案文件的当前记录读取数据,到达记录末端时返回(0, EOF),直到调用Next方法转入下一记录。

  tar.gz 文件写入,代码实现:

package main import ( "archive/tar" "fmt" "os" ) func main() { fileName := "./file.tar.gz" insertByte := []byte("this is test tar weite.") file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if err != nil { fmt.Printf("open file ./file.tar.gz err : %v\n", err) } if file != nil { defer func(file *os.File) { file.Close() }(file) } write := tar.NewWriter(file) fileInfo, err := os.Stat(fileName) if err != nil { fmt.Printf("os stat err : %v\n", err) } hdr, err := tar.FileInfoHeader(fileInfo, "") if err != nil { fmt.Printf("tar FileInfoHeader err : %v\n", err) } else { fmt.Printf("hdr.Size is %v \n", hdr.Size) hdr.Size = int64(len(insertByte)) } err = write.WriteHeader(hdr) if err != nil { fmt.Printf("write WriteHeader err : %v\n", err) } ret, err := write.Write(insertByte) if err != nil { fmt.Printf("write ./file.tar.gz err : %v\n", err) } else { fmt.Printf("write ./file.tar.gz success . return number is %d \n", ret) } err = write.Flush() if err != nil { fmt.Printf("write flush err : %v\n", err) } err = write.Close() if err != nil { fmt.Printf("write close err : %v\n", err) } }

  tar.gz 文件读取,代码实现:

package main import ( "archive/tar" "fmt" "os" ) func main() { fileName := "./file.tar.gz" file, err := os.Open(fileName) if err != nil { fmt.Printf("open file ./file.tar.gz err : %v\n", err) } if file != nil { defer func(file *os.File) { file.Close() }(file) } read := tar.NewReader(file) hdr, err := read.Next() var getByte = make([]byte, hdr.Size) _, err = read.Read(getByte) if err != nil { fmt.Printf("read err : %v\n", err) } fmt.Println(string(getByte)) }

  其它压缩文件操作

  compress/flate 包实现了deflate压缩数据格式。gzip包和zlib包实现了对基于deflate的文件格式的访问。

  compress/gzip 包实现了gzip格式压缩文件的读写。

  compress/zlib 包实现了对zlib格式压缩数据的读写。

  • Tag:

相关文章

  • 三星GalaxyS4Zoom(将相机与手机完美结合,打造出色的拍摄体验)

    摘要:在现代社会中,智能手机已经成为我们生活中不可或缺的一部分。然而,对于热爱摄影的人们来说,仅有一个智能手机可能无法满足他们对于高质量照片的追求。三星推出了GalaxyS4Zoom,这...
    2025-11-04
  • 实现SSO单点登录的思考

    随着公司业务的发展,子系统越来越多,实现SSO单点登录的需求就愈加迫切。我们一些子系统中都有使用Redis存储Session,这最初是为了解决应用集群部署时的Session共享问题,却也为应用之间共享
    2025-11-04
  • 手把手教会你带你理解Go语言中的包

    前言Hey,大家好呀,我是星期八,咱们原来写的代码,都是缩在一块的,久而久之咱们可能都能感觉到冗余。所以今天就来学一下包这个东西,将咱们的代码拆分一下。包包可以理解为存放多个.go的文件夹但是这个文件
    2025-11-04
  • 深鸿会深大小组:鸿蒙Hi3861最详细环境搭建

    想了解更多内容,请访问:和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz前言正所谓“工欲善其事,必先利其器”,目前鸿蒙系统的开发方式是在Linux系统上面
    2025-11-04
  • 盗版电脑如何安装系统?(简明教程帮你顺利安装系统!)

    摘要:对于使用盗版电脑的用户来说,安装系统可能会面临一些挑战。本文将为大家提供一份简明的教程,帮助你顺利完成盗版电脑的系统安装。请确保你已经了解并遵守相关法律法规,本文不鼓励使用盗版软件...
    2025-11-04
  • 从面试角度分析ArrayList源码

    ArrayList类图如下:ArrayList的底层是由数组实现的,数组的特点是固定大小,而ArrayList实现了动态扩容。ArrayList部分变量如下,在下面的分析中会用到这些变量。/***默认
    2025-11-04

最新评论