Documentation
¶
Overview ¶
Package zip は、ZIP アーカイブの読み書きをサポートします。
詳細については、ZIP specification を参照してください。
このパッケージはディスクスパニングをサポートしていません。
ZIP64 についての注意点:
後方互換性を保つために、FileHeader には 32 ビットと 64 ビットの両方の Size フィールドがあります。 64 ビットフィールドには常に正しい値が含まれ、通常のアーカイブでは両方のフィールドが同じ値になります。 ZIP64 形式が必要なファイルの場合、32 ビットフィールドは 0xffffffff になり、代わりに 64 ビットフィールドを使用する必要があります。
Index ¶
- Constants
- Variables
- func RegisterCompressor(method uint16, comp Compressor)
- func RegisterDecompressor(method uint16, dcomp Decompressor)
- type Compressor
- type Decompressor
- type File
- type FileHeader
- type ReadCloser
- type Reader
- type Writer
- func (w *Writer) Close() error
- func (w *Writer) Copy(f *File) error
- func (w *Writer) Create(name string) (io.Writer, error)
- func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error)
- func (w *Writer) CreateRaw(fh *FileHeader) (io.Writer, error)
- func (w *Writer) Flush() error
- func (w *Writer) RegisterCompressor(method uint16, comp Compressor)
- func (w *Writer) SetComment(comment string) error
- func (w *Writer) SetOffset(n int64)
Examples ¶
Constants ¶
const ( Store uint16 = 0 Deflate uint16 = 8 )
圧縮方式
Variables ¶
Functions ¶
func RegisterCompressor ¶ added in v1.2.0
func RegisterCompressor(method uint16, comp Compressor)
RegisterCompressor は、特定のメソッド ID にカスタムの圧縮プログラムを登録または上書きします。 一般的なメソッド Store と Deflate は組み込みです。
func RegisterDecompressor ¶ added in v1.2.0
func RegisterDecompressor(method uint16, dcomp Decompressor)
RegisterDecompressor は、特定のメソッド ID にカスタムの解凍プログラムを登録または上書きします。 メソッドの解凍プログラムが見つからない場合、Writer はパッケージレベルで解凍プログラムを検索します。 一般的なメソッド Store と Deflate は組み込みです。
Types ¶
type Compressor ¶ added in v1.2.0
type Compressor func(w io.Writer) (io.WriteCloser, error)
Compressor は、w に書き込む新しい圧縮ライターを返します。 WriteCloser の Close メソッドは、保留中のデータを w にフラッシュするために使用する必要があります。 Compressor 自体は、複数のゴルーチンから同時に呼び出されることができますが、 各返されたライターは一度に1つのゴルーチンによってのみ使用されます。
type Decompressor ¶ added in v1.2.0
type Decompressor func(r io.Reader) io.ReadCloser
Decompressor は、r から読み取る新しい解凍リーダーを返します。 ReadCloser の Close メソッドは、関連するリソースを解放するために使用する必要があります。 Decompressor 自体は、複数のゴルーチンから同時に呼び出されることができますが、 各返されたリーダーは一度に1つのゴルーチンによってのみ使用されます。
type File ¶
type File struct { FileHeader // contains filtered or unexported fields }
File は、ZIP アーカイブ内の単一のファイルです。 ファイル情報は、埋め込み FileHeader にあります。 ファイルの内容は、Open を呼び出すことでアクセスできます。
func (*File) DataOffset ¶ added in v1.2.0
DataOffset は、ファイルの圧縮された可能性のあるデータのオフセットを、zip ファイルの先頭からの相対位置で返します。
ほとんどの呼び出し元は、データを透過的に解凍し、チェックサムを検証する Open を代わりに使用する必要があります。
type FileHeader ¶
type FileHeader struct { // Name is the name of the file. // // It must be a relative path, not start with a drive letter (such as "C:"), // and must use forward slashes instead of back slashes. A trailing slash // indicates that this file is a directory and should have no data. Name string // Comment is any arbitrary user-defined string shorter than 64KiB. Comment string // NonUTF8 indicates that Name and Comment are not encoded in UTF-8. // // By specification, the only other encoding permitted should be CP-437, // but historically many ZIP readers interpret Name and Comment as whatever // the system's local character encoding happens to be. // // This flag should only be set if the user intends to encode a non-portable // ZIP file for a specific localized region. Otherwise, the Writer // automatically sets the ZIP format's UTF-8 flag for valid UTF-8 strings. NonUTF8 bool CreatorVersion uint16 ReaderVersion uint16 Flags uint16 // Method is the compression method. If zero, Store is used. Method uint16 // Modified is the modified time of the file. // // When reading, an extended timestamp is preferred over the legacy MS-DOS // date field, and the offset between the times is used as the timezone. // If only the MS-DOS date is present, the timezone is assumed to be UTC. // // When writing, an extended timestamp (which is timezone-agnostic) is // always emitted. The legacy MS-DOS date field is encoded according to the // location of the Modified time. Modified time.Time // ModifiedTime is an MS-DOS-encoded time. // // Deprecated: Use Modified instead. ModifiedTime uint16 // ModifiedDate is an MS-DOS-encoded date. // // Deprecated: Use Modified instead. ModifiedDate uint16 // CRC32 is the CRC32 checksum of the file content. CRC32 uint32 // CompressedSize is the compressed size of the file in bytes. // If either the uncompressed or compressed size of the file // does not fit in 32 bits, CompressedSize is set to ^uint32(0). // // Deprecated: Use CompressedSize64 instead. CompressedSize uint32 // UncompressedSize is the compressed size of the file in bytes. // If either the uncompressed or compressed size of the file // does not fit in 32 bits, CompressedSize is set to ^uint32(0). // // Deprecated: Use UncompressedSize64 instead. UncompressedSize uint32 // CompressedSize64 is the compressed size of the file in bytes. CompressedSize64 uint64 // UncompressedSize64 is the uncompressed size of the file in bytes. UncompressedSize64 uint64 Extra []byte ExternalAttrs uint32 }
FileHeader は、ZIP ファイル内のファイルを説明します。 詳細については、ZIP specification を参照してください。
func FileInfoHeader ¶
func FileInfoHeader(fi fs.FileInfo) (*FileHeader, error)
FileInfoHeaderは、fs.FileInfoから部分的に設定されたFileHeaderを作成します。 fs.FileInfoのNameメソッドは、記述するファイルのベース名のみを返すため、 ファイルの完全なパス名を提供するために、返されたヘッダーのNameフィールドを変更する必要がある場合があります。 圧縮が必要な場合は、呼び出し元はFileHeader.Methodフィールドを設定する必要があります。デフォルトでは設定されていません。
func (*FileHeader) FileInfo ¶
func (h *FileHeader) FileInfo() fs.FileInfo
FileInfo は、FileHeader の fs.FileInfo を返します。
func (*FileHeader) ModTime
deprecated
func (h *FileHeader) ModTime() time.Time
ModTime は、旧来の ModifiedDate および ModifiedTime フィールドを使用して、UTC での変更時刻を返します。
Deprecated: 代わりに Modified を使用してください。
func (*FileHeader) Mode ¶
func (h *FileHeader) Mode() (mode fs.FileMode)
Mode は、FileHeader のパーミッションとモードビットを返します。
func (*FileHeader) SetModTime
deprecated
func (h *FileHeader) SetModTime(t time.Time)
SetModTime は、与えられた時刻を UTC で指定して、Modified、ModifiedTime、および ModifiedDate フィールドを設定します。
Deprecated: 代わりに Modified を使用してください。
func (*FileHeader) SetMode ¶
func (h *FileHeader) SetMode(mode fs.FileMode)
SetMode は、FileHeader のパーミッションとモードビットを変更します。
type ReadCloser ¶
type ReadCloser struct { Reader // contains filtered or unexported fields }
ReadCloser は、不要になったときに閉じる必要がある Reader です。
func OpenReader ¶
func OpenReader(name string) (*ReadCloser, error)
OpenReader は、指定された名前の Zip ファイルを開き、ReadCloser を返します。
アーカイブ内のファイルのいずれかが、[filepath.IsLocal] によって定義されるローカルでない名前 またはバックスラッシュを含む名前を使用している場合、 および GODEBUG 環境変数に `zipinsecurepath=0` が含まれている場合、 OpenReader は ErrInsecurePath エラーを返すリーダーを返します。 将来の Go のバージョンでは、この動作がデフォルトで導入される可能性があります。 ローカルでない名前を受け入れたいプログラムは、ErrInsecurePath エラーを無視して返されたリーダーを使用できます。
type Reader ¶
Reader は、ZIP アーカイブからコンテンツを提供するための構造体です。
Example ¶
package main import ( "github.com/shogo82148/std/archive/zip" "github.com/shogo82148/std/fmt" "github.com/shogo82148/std/io" "github.com/shogo82148/std/log" "github.com/shogo82148/std/os" ) func main() { // 読み取り用に zip アーカイブを開きます。 r, err := zip.OpenReader("testdata/readme.zip") if err != nil { log.Fatal(err) } defer r.Close() // アーカイブ内のファイルを反復処理し、その内容の一部を出力します。 for _, f := range r.File { fmt.Printf("Contents of %s:\n", f.Name) rc, err := f.Open() if err != nil { log.Fatal(err) } _, err = io.CopyN(os.Stdout, rc, 68) if err != nil { log.Fatal(err) } rc.Close() fmt.Println() } }
Output: Contents of README: This is the source code repository for the Go programming language.
func NewReader ¶
NewReader は、指定されたサイズを持つと想定される r から読み取る新しい Reader を返します。
アーカイブ内のファイルのいずれかが、[filepath.IsLocal] によって定義されるローカルでない名前 またはバックスラッシュを含む名前を使用している場合、 および GODEBUG 環境変数に `zipinsecurepath=0` が含まれている場合、 NewReader は ErrInsecurePath エラーを返すリーダーを返します。 将来の Go のバージョンでは、この動作がデフォルトで導入される可能性があります。 ローカルでない名前を受け入れたいプログラムは、ErrInsecurePath エラーを無視して返されたリーダーを使用できます。
func (*Reader) Open ¶ added in v1.16.0
Openは、fs.FS.Openのセマンティクスを使用して、ZIPアーカイブ内の指定されたファイルを開きます。 パスは常にスラッシュで区切られ、先頭に/または../要素はありません。
func (*Reader) RegisterDecompressor ¶ added in v1.6.0
func (r *Reader) RegisterDecompressor(method uint16, dcomp Decompressor)
RegisterDecompressor は、特定のメソッド ID にカスタムの解凍プログラムを登録または上書きします。 メソッドの解凍プログラムが見つからない場合、Reader はパッケージレベルで解凍プログラムを検索します。
type Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
Writer は、ZIP ファイルのライターを実装します。
Example ¶
package main import ( "github.com/shogo82148/std/archive/zip" "github.com/shogo82148/std/bytes" "github.com/shogo82148/std/log" ) func main() { // アーカイブを書き込むためのバッファを作成します。 buf := new(bytes.Buffer) // 新しい zip アーカイブを作成します。 w := zip.NewWriter(buf) // アーカイブにいくつかのファイルを追加します。 var files = []struct { Name, Body string }{ {"readme.txt", "このアーカイブにはいくつかのテキストファイルが含まれています。"}, {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"}, {"todo.txt", "動物取扱業免許を取得する。\nもっと例を書く。"}, } for _, file := range files { f, err := w.Create(file.Name) if err != nil { log.Fatal(err) } _, err = f.Write([]byte(file.Body)) if err != nil { log.Fatal(err) } } // Close でエラーを確認することを忘れないでください。 err := w.Close() if err != nil { log.Fatal(err) } }
Output:
func (*Writer) Copy ¶ added in v1.17.0
Copy は、ファイル f(Reader から取得された)を w にコピーします。 これは、解凍、圧縮、および検証をバイパスして、生の形式で直接コピーします。
func (*Writer) Create ¶
Create は、指定された名前を使用してファイルを zip ファイルに追加します。 返される Writer にファイルの内容を書き込む必要があります。 ファイルの内容は、Deflate メソッドを使用して圧縮されます。 名前は相対パスである必要があります。 ドライブレター(例:C:)または先頭のスラッシュで始まることはできず、 スラッシュのみが許可されます。 ファイルではなくディレクトリを作成するには、名前の末尾にスラッシュを追加します。 次の Create、CreateHeader、または Close を呼び出す前に、ファイルの内容を io.Writer に書き込む必要があります。
func (*Writer) CreateHeader ¶
func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error)
CreateHeader は、ファイルメタデータに提供された FileHeader を使用して、zip アーカイブにファイルを追加します。 Writer は fh を所有し、そのフィールドを変更する可能性があります。 CreateHeader を呼び出した後、呼び出し元は fh を変更してはいけません。
これは、ファイルの内容を書き込む必要がある Writer を返します。 次の Create、CreateHeader、CreateRaw、または Close を呼び出す前に、ファイルの内容を io.Writer に書き込む必要があります。
func (*Writer) CreateRaw ¶ added in v1.17.0
func (w *Writer) CreateRaw(fh *FileHeader) (io.Writer, error)
CreateRaw は、提供された FileHeader を使用して zip アーカイブにファイルを追加し、 ファイルの内容を書き込むための Writer を返します。 次の Create、CreateHeader、CreateRaw、または Close を呼び出す前に、ファイルの内容を io.Writer に書き込む必要があります。
CreateHeader とは異なり、Writer に渡されるバイトは圧縮されません。
func (*Writer) Flush ¶ added in v1.4.0
Flush は、バッファリングされたデータを基になるライターにフラッシュします。 Flush を呼び出す必要は通常ありません。Close を呼び出すだけで十分です。
func (*Writer) RegisterCompressor ¶ added in v1.6.0
func (w *Writer) RegisterCompressor(method uint16, comp Compressor)
RegisterCompressor は、特定のメソッド ID にカスタムの圧縮プログラムを登録または上書きします。 メソッドの圧縮プログラムが見つからない場合、Writer はパッケージレベルで圧縮プログラムを検索します。
Example ¶
package main import ( "github.com/shogo82148/std/archive/zip" "github.com/shogo82148/std/bytes" "github.com/shogo82148/std/compress/flate" "github.com/shogo82148/std/io" ) func main() { // デフォルトの Deflate 圧縮プログラムを、より高い圧縮レベルのカスタム圧縮プログラムで上書きします。 // アーカイブを書き込むためのバッファを作成します。 buf := new(bytes.Buffer) // 新しい zip アーカイブを作成します。 w := zip.NewWriter(buf) // カスタムの Deflate 圧縮プログラムを登録します。 w.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) { return flate.NewWriter(out, flate.BestCompression) }) // ファイルを w に追加します。 }
Output:
func (*Writer) SetComment ¶ added in v1.10.0
SetComment は、中央ディレクトリのコメントフィールドを設定します。 Close を呼び出す前にのみ呼び出すことができます。