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

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

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

import "archive/zip"

zip包提供了zip档案文件的读写服务。

本包不支持跨硬盘的压缩。

关于ZIP64:

为了向下兼容,FileHeader同时拥有32位和64位的Size字段。64位字段总是包含正确的值,对普通格式的档案未见它们的值是相同的。对zip64格式的档案文件32位字段将是0xffffffff,必须使用64位字段。

代码语言:javascript
复制
Constants
Variables
type Compressor
type Decompressor
func RegisterCompressor(method uint16, comp Compressor)
func RegisterDecompressor(method uint16, d Decompressor)
type FileHeader
func FileInfoHeader(fi os.FileInfo) (*FileHeader, error)
func (h *FileHeader) FileInfo() os.FileInfo
func (h *FileHeader) Mode() (mode os.FileMode)
func (h *FileHeader) SetMode(mode os.FileMode)
func (h *FileHeader) ModTime() time.Time
func (h *FileHeader) SetModTime(t time.Time)
type File
func (f *File) DataOffset() (offset int64, err error)
func (f *File) Open() (rc io.ReadCloser, err error)
type Reader
func NewReader(r io.ReaderAt, size int64) (*Reader, error)
type ReadCloser
func OpenReader(name string) (*ReadCloser, error)
func (rc *ReadCloser) Close() error
type Writer
func NewWriter(w io.Writer) *Writer
func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error)
func (w *Writer) Create(name string) (io.Writer, error)
func (w *Writer) Close() error

Constants

代码语言:javascript
复制
const (
    Store   uint16 = 0
    Deflate uint16 = 8
)

预定义压缩算法。

Variables

代码语言:javascript
复制
var (
    ErrFormat    = errors.New("zip: not a valid zip file")
    ErrAlgorithm = errors.New("zip: unsupported compression algorithm")
    ErrChecksum  = errors.New("zip: checksum error")
)

type Compressor

代码语言:javascript
复制
type Compressor func(io.Writer) (io.WriteCloser, error)

Compressor函数类型会返回一个io.WriteCloser,该接口会将数据压缩后写入提供的接口。关闭时,应将缓冲中的数据刷新到下层接口中。

type Decompressor

代码语言:javascript
复制
type Decompressor func(io.Reader) io.ReadCloser

Decompressor函数类型会返回一个io.ReadCloser, 该接口的Read方法会将读取自提供的接口的数据提前解压缩。程序员有责任在读取结束时关闭该io.ReadCloser。

func RegisterCompressor

代码语言:javascript
复制
func RegisterCompressor(method uint16, comp Compressor)

RegisterCompressor使用指定的方法ID注册一个Compressor类型函数。常用的方法Store和Deflate是内建的。

func RegisterDecompressor

代码语言:javascript
复制
func RegisterDecompressor(method uint16, d Decompressor)

RegisterDecompressor使用指定的方法ID注册一个Decompressor类型函数。

type FileHeader

代码语言:javascript
复制
type FileHeader struct {
    // Name是文件名,它必须是相对路径,不能以设备或斜杠开始,只接受'/'作为路径分隔符
    Name string
    CreatorVersion     uint16
    ReaderVersion      uint16
    Flags              uint16
    Method             uint16
    ModifiedTime       uint16 // MS-DOS时间
    ModifiedDate       uint16 // MS-DOS日期
    CRC32              uint32
    CompressedSize     uint32 // 已弃用;请使用CompressedSize64
    UncompressedSize   uint32 // 已弃用;请使用UncompressedSize64
    CompressedSize64   uint64
    UncompressedSize64 uint64
    Extra              []byte
    ExternalAttrs      uint32 // 其含义依赖于CreatorVersion
    Comment            string
}

FileHeader描述zip文件中的一个文件。参见zip的定义获取细节。

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

FileInfoHeader返回一个根据fi填写了部分字段的Header。因为os.FileInfo接口的Name方法只返回它描述的文件的无路径名,有可能需要将返回值的Name字段修改为文件的完整路径名。

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

FileInfo返回一个根据h的信息生成的os.FileInfo。

func (*FileHeader) Mode
代码语言:javascript
复制
func (h *FileHeader) Mode() (mode os.FileMode)

Mode返回h的权限和模式位。

func (*FileHeader) SetMode
代码语言:javascript
复制
func (h *FileHeader) SetMode(mode os.FileMode)

SetMode修改h的权限和模式位。

func (*FileHeader) ModTime
代码语言:javascript
复制
func (h *FileHeader) ModTime() time.Time

返回最近一次修改的UTC时间。(精度2s)

func (*FileHeader) SetModTime
代码语言:javascript
复制
func (h *FileHeader) SetModTime(t time.Time)

将ModifiedTime和ModifiedDate字段设置为给定的UTC时间。(精度2s)

type File

代码语言:javascript
复制
type File struct {
    FileHeader
    // 内含隐藏或非导出字段
}
func (*File) DataOffset
代码语言:javascript
复制
func (f *File) DataOffset() (offset int64, err error)

DataOffset返回文件的可能存在的压缩数据相对于zip文件起始的偏移量。大多数调用者应使用Open代替,该方法会主动解压缩数据并验证校验和。

func (*File) Open
代码语言:javascript
复制
func (f *File) Open() (rc io.ReadCloser, err error)

Open方法返回一个io.ReadCloser接口,提供读取文件内容的方法。可以同时读取多个文件。

type Reader

代码语言:javascript
复制
type Reader struct {
    File    []*File
    Comment string
    // 内含隐藏或非导出字段
}
func NewReader
代码语言:javascript
复制
func NewReader(r io.ReaderAt, size int64) (*Reader, error)

NewReader返回一个从r读取数据的*Reader,r被假设其大小为size字节。

type ReadCloser

代码语言:javascript
复制
type ReadCloser struct {
    Reader
    // 内含隐藏或非导出字段
}
func OpenReader
代码语言:javascript
复制
func OpenReader(name string) (*ReadCloser, error)

OpenReader会打开name指定的zip文件并返回一个*ReadCloser。

func (*ReadCloser) Close
代码语言:javascript
复制
func (rc *ReadCloser) Close() error

Close关闭zip文件,使它不能用于I/O。

type Writer

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

Writer类型实现了zip文件的写入器。

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

NewWriter创建并返回一个将zip文件写入w的*Writer。

func (*Writer) CreateHeader
代码语言:javascript
复制
func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error)

使用给出的*FileHeader来作为文件的元数据添加一个文件进zip文件。本方法返回一个io.Writer接口(用于写入新添加文件的内容)。新增文件的内容必须在下一次调用CreateHeader、Create或Close方法之前全部写入。

func (*Writer) Create ¶
代码语言:javascript
复制
func (w *Writer) Create(name string) (io.Writer, error)

使用给出的文件名添加一个文件进zip文件。本方法返回一个io.Writer接口(用于写入新添加文件的内容)。文件名必须是相对路径,不能以设备或斜杠开始,只接受'/'作为路径分隔。新增文件的内容必须在下一次调用CreateHeader、Create或Close方法之前全部写入。

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

Close方法通过写入中央目录关闭该*Writer。本方法不会也没办法关闭下层的io.Writer接口。


参考资料:

Go语言中文文档

http://www.golang.ltd/

Go语言官方文档

https://golang.google.cn/

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Constants
  • Variables
  • type Compressor
  • type Decompressor
  • func RegisterCompressor
  • func RegisterDecompressor
  • type FileHeader
    • func FileInfoHeader
      • func (*FileHeader) FileInfo
        • func (*FileHeader) Mode
          • func (*FileHeader) SetMode
            • func (*FileHeader) ModTime
              • func (*FileHeader) SetModTime
              • type File
                • func (*File) DataOffset
                  • func (*File) Open
                  • type Reader
                    • func NewReader
                    • type ReadCloser
                      • func OpenReader
                        • func (*ReadCloser) Close
                        • type Writer
                          • func NewWriter
                            • func (*Writer) CreateHeader
                              • func (*Writer) Create ¶
                                • func (*Writer) Close
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档