archive/tar
import “archive/tar”
简介
tar包实现了访问tar归档文件的方法。
概览
tar包实现了访问tar归档文件的方法。该包目标覆盖各种变种,包括GNU和BSD的tar归档文件。
参考:
http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5
http://www.gnu.org/software/tar/manual/html_node/Standard.html
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html
内容
常量
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' // 稀疏文件)
变量
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
type Header struct {Name string // 头部名称,一般设置为文件名全路径Mode int64 // 权限和模式位Uid int // 用户idGid int // 用户组idSize int64 // 按字节表示长度ModTime time.Time // 修改时间Typeflag byte // 头部条目类型Linkname string // 链接的目标名称Uname string // 用户名Gname string // 用户组名Devmajor int64 // 字符或块主设备号Devminor int64 // 字符或块次设备号AccessTime time.Time // 访问时间ChangeTime time.Time // 状态改变时间Xattrs map[string]string}
头部表示一个tar归档文件的一个头部信息。头部信息的一些域可以不填充数据。
func FileInfoHeader
func FileInfoHeader(fi os.FileInfo, link string) (*Header, error)
FileInfoHeader根据fi创建一个域部分填充的头部。如果fi表示一个符号链接的话,FileInfoHeader就把链接当作链接目标。如果fi是一个目录的话,文件名称会被追加一个斜杠(/)。因为os.FileInfo的方法Name()返回的是文件的短文件名,而不是全路径,所以可能需要修改返回的tar头部的Name域,以提供一个文件的全路径。
func (*Header) FileInfo
func (h *Header) FileInfo() os.FileInfo
FileInfo 返回一个tar头部的os.FileInfo信息。
type Reader
type Reader struct {// 包含过滤掉的或未导出的域}
Reader提供了对一个tar归档文件内容的顺序访问。一个tar归档文件由一系列文件组成。Next()方法指向归档文件中的每个文件(包括第一个文件)的开始处,然后就可以使用io.Reader来访问文件的数据。
func NewReader
func NewReader(r io.Reader) *Reader
NewReader()方法从一个io.Reader创建一个新的tar的Reader。
func (*Reader) Next
func (tr *Reader) Next() (*Header, error)
Next()方法指向tar归档文件中的下一个文件(包括第一个文件)的开始处。
func (*Reader) Read
func (tr *Reader) Read(b []byte) (n int, err error)
Read()方法从当前指向的tar归档文件中的文件的开始处读取数据。当读取到当前文件的末尾时,它返回0和io.EOF。当Next()再被调用时,重新从下一个文件的开始处读取数据。
type Writer
type Writer struct {// 包含过滤掉的或未导出的域}
Writer提供了对tar归档文件(POSIX.1格式)内容的顺序写入。tar归档文件由一系列文件组成。调用WriteHeader来开始创建一个新文件,然后调用Write方法来将数据写入文件中,一共可以写入最多hdr.Size个字节。
func NewWriter
func NewWriter(w io.Writer) *Writer
NewWriter()方法创建一个向io.Writer写入数据的tar的Writer。
func (*Writer) Close
func (tw *Writer) Close() error
Close()方法关闭tar归档文件,将所有没有写入到底层writer的数据写入。
func (*Writer) Flush
func (tw *Writer) Flush() error
Flush()方法结束写入数据到当前文件(可选)。
func (*Writer) Write
func (tw *Writer) Write(b []byte) (n int, err error)
Writer()方法向tar归档文件中当前指向的文件写入数据。如果在调用WriteHeader()方法后写入文件的字节数大于hdr.Size的时候返回错误ErrWriteTooLong。
func (*Writer) WriteHeader
func (tw *Writer) WriteHeader(hdr *Header) error
WriterHeader()方法写入tar头部hdr,然后准备接收文件的内容。WriterHeeader()方法会调用Flush()方法,如果这不是第一个头部的话。在tar文件关闭之后调用该方法会返回ErrWriteAfterClose错误。
