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

系统运维2025-11-05 12:15:07419

  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格式压缩数据的读写。

本文地址:http://www.bzve.cn/html/359b1799623.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

由于安装了windows系统,导致Grub出现问题,很多人会选择重装Ubuntu系统,其实完全没有必要,只要将Grub进行修复就可以了,下面小编就给大家带来使用Ubuntu Live CD 修复Grub引导的方法,一起来学习下吧。本文以 Ubuntu Live CD 修复 Grub 引导为例,已在 /dev/sda3 安装 Fedora。首先制作 Ubuntu 启动 USB复制代码代码如下:sudo dd if=ubuntu-13.10-desktop-amd64.iso of=/dev/sdb #/dev/sdb 为 USB 盘符1.使用启动 USB 进入 Ubuntu 试用环境2.查看硬盘分区状况,获取 Linux 系统安装分区编号代码如下:sudo fdisk -l查看输出结果,然后根据文件类型和分区大小来判定 Linux 系统安装在哪块硬盘和安装的分区。我的电脑是在 /dev/sda3 安装了 Fedora。或者,打开 Gparted 图形化工具来查看分区信息也可以。挂载 Fedora 安装分区3.已知 Fedora 安装在了 /dev/sda3 上,所以我们可以用下面命令来挂载 Fedora 安装分区。你需要将 /dev/sda3 换成自己的 Linux 安装分区。代码如下:sudo mount /dev/sda3 /mnt4.挂载其他所需的目录(使用 --bind)代码如下:sudo mount --bind /dev /mnt/devsudo mount --bind /proc /mnt/procsudo mount --bind /sys /mnt/sys5.Chroot 到硬盘上的 Linux 系统代码如下:sudo chroot /mnt6.安装&更新 Grub代码如下:grub2-install /dev/sdagrub2-mkconfig -o /boot/grub2/grub.cfg7.Grub 已经修复成功,我们还需要退出 chroot 环境、卸载已经挂载的设备与目录:代码如下:exit #退出 chroot 环境sudo umount /mnt/devsudo umount /mnt/procsudo umount /mnt/syssudo umount /mnt8.重启!上面就是使用Ubuntu LiveCD修复grub的方法介绍了,假如你在使用双系统安装windows中出现Grub引导错误,不妨使用该方法进行修复吧。

联想天逸310使用教程(一步步教你如何使用联想天逸310,让你的工作和娱乐更加便捷高效)

恢复U盘格式化数据的教程(详细介绍如何使用工具和方法恢复因格式化而丢失的数据)

探究电脑七彩虹主板的性能与特点(解析电脑七彩虹主板的一体化设计与多功能支持)

探索酷派电话的用户体验(了解酷派手机的功能特点与市场反馈)

三星450R4J笔记本电脑的性能和特点(全面评测三星450R4J,让您了解这款笔记本电脑的一切)

解除呼叫转移的方法与技巧(掌握解除呼叫转移的关键步骤,轻松管理通信需求)

罗技欧姆龙轴(揭开罗技欧姆龙轴的神秘面纱,发现游戏世界的新维度)

友情链接

滇ICP备2023006006号-39