前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言情怀-第41期 Go 语言标准库翻译 archive/tar

Golang语言情怀-第41期 Go 语言标准库翻译 archive/tar

作者头像
李海彬
发布2021-03-09 10:55:18
5080
发布2021-03-09 10:55:18
举报
文章被收录于专栏:Golang语言社区Golang语言社区

import "archive/tar"

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

代码语言:javascript
复制
Constants
Variables
type Header
func FileInfoHeader(fi os.FileInfo, link string) (*Header, error)
func (h *Header) FileInfo() os.FileInfo
type Reader
func NewReader(r io.Reader) *Reader
func (tr *Reader) Next() (*Header, error)
func (tr *Reader) Read(b []byte) (n int, err error)
type Writer
func NewWriter(w io.Writer) *Writer
func (tw *Writer) WriteHeader(hdr *Header) error
func (tw *Writer) Write(b []byte) (n int, err error)
func (tw *Writer) Flush() error
func (tw *Writer) Close() error

Constants

代码语言:javascript
复制
const (
    // 类型
    TypeReg           = '0'    // 普通文件
    TypeRegA          = '\x00' // 普通文件
    TypeLink          = '1'    // 硬链接
    TypeSymlink       = '2'    // 符号链接
    TypeChar          = '3'    // 字符设备节点
    TypeBlock         = '4'    // 块设备节点
    TypeDir           = '5'    // 目录
    TypeFifo          = '6'    // 先进先出队列节点
    TypeCont          = '7'    // 保留位
    TypeXHeader       = 'x'    // 扩展头
    TypeXGlobalHeader = 'g'    // 全局扩展头
    TypeGNULongName   = 'L'    // 下一个文件记录有个长名字
    TypeGNULongLink   = 'K'    // 下一个文件记录指向一个具有长名字的文件
    TypeGNUSparse     = 'S'    // 稀疏文件
)

Variables

代码语言:javascript
复制
var (
    ErrWriteTooLong    = errors.New("archive/tar: write too long")
    ErrFieldTooLong    = errors.New("archive/tar: header field too long")
    ErrWriteAfterClose = errors.New("archive/tar: write after close")
)
var (
    ErrHeader = errors.New("archive/tar: invalid tar header")
)

type Header

代码语言:javascript
复制
type Header struct {
    Name       string    // 记录头域的文件名
    Mode       int64     // 权限和模式位
    Uid        int       // 所有者的用户ID
    Gid        int       // 所有者的组ID
    Size       int64     // 字节数(长度)
    ModTime    time.Time // 修改时间
    Typeflag   byte      // 记录头的类型
    Linkname   string    // 链接的目标名
    Uname      string    // 所有者的用户名
    Gname      string    // 所有者的组名
    Devmajor   int64     // 字符设备或块设备的major number
    Devminor   int64     // 字符设备或块设备的minor number
    AccessTime time.Time // 访问时间
    ChangeTime time.Time // 状态改变时间
    Xattrs     map[string]string
}

Header代表tar档案文件里的单个头。Header类型的某些字段可能未使用。

func FileInfoHeader
代码语言:javascript
复制
func FileInfoHeader(fi os.FileInfo, link string) (*Header, error)

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

func (*Header) FileInfo
代码语言:javascript
复制
func (h *Header) FileInfo() os.FileInfo

FileInfo返回该Header对应的文件信息。(os.FileInfo类型)

type Reader

代码语言:javascript
复制
type Reader struct {
    // 内含隐藏或非导出字段
}

Reader提供了对一个tar档案文件的顺序读取。一个tar档案文件包含一系列文件。Next方法返回档案中的下一个文件(包括第一个),返回值可以被视为io.Reader来获取文件的数据。

func NewReader
代码语言:javascript
复制
func NewReader(r io.Reader) *Reader

NewReader创建一个从r读取的Reader。

func (*Reader) Next
代码语言:javascript
复制
func (tr *Reader) Next() (*Header, error)

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

func (*Reader) Read
代码语言:javascript
复制
func (tr *Reader) Read(b []byte) (n int, err error)

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

type Writer

代码语言:javascript
复制
type Writer struct {
    // 内含隐藏或非导出字段
}

Writer类型提供了POSIX.1格式的tar档案文件的顺序写入。一个tar档案文件包含一系列文件。调用WriteHeader来写入一个新的文件,然后调用Write写入文件的数据,该记录写入的数据不能超过hdr.Size字节。

func NewWriter
代码语言:javascript
复制
func NewWriter(w io.Writer) *Writer

NewWriter创建一个写入w的*Writer。

func (*Writer) WriteHeader
代码语言:javascript
复制
func (tw *Writer) WriteHeader(hdr *Header) error

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

func (*Writer) Write
代码语言:javascript
复制
func (tw *Writer) Write(b []byte) (n int, err error)

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

func (*Writer) Flush
代码语言:javascript
复制
func (tw *Writer) Flush() error

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

func (*Writer) Close
代码语言:javascript
复制
func (tw *Writer) Close() error

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


参考资料:

Go语言中文文档

http://www.golang.ltd/

Go语言官方文档

https://golang.google.cn/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言情怀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Constants
  • Variables
  • type Header
    • func FileInfoHeader
      • func (*Header) FileInfo
      • type Reader
        • func NewReader
          • func (*Reader) Next
            • func (*Reader) Read
            • type Writer
              • func NewWriter
                • func (*Writer) WriteHeader
                  • func (*Writer) Write
                    • func (*Writer) Flush
                      • func (*Writer) Close
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档