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) AddFS(fsys fs.FS) error
- 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 から読み取る新しい解凍リーダーを返します。 io.ReadCloser の Close メソッドは、関連するリソースを解放するために使用する必要があります。 Decompressor 自体は、複数のゴルーチンから同時に呼び出されることができますが、 各返されたリーダーは一度に1つのゴルーチンによってのみ使用されます。
type File ¶
type File struct { FileHeader // contains filtered or unexported fields }
File は、ZIP アーカイブ内の単一のファイルです。 ファイル情報は、埋め込み FileHeader にあります。 ファイルの内容は、 File.Open を呼び出すことでアクセスできます。
func (*File) DataOffset ¶ added in v1.2.0
DataOffset は、ファイルの圧縮された可能性のあるデータのオフセットを、zip ファイルの先頭からの相対位置で返します。
ほとんどの呼び出し元は、データを透過的に解凍し、チェックサムを検証する File.Open を代わりに使用する必要があります。
func (*File) Open ¶
func (f *File) Open() (io.ReadCloser, error)
Open は、ファイルの内容にアクセスする ReadCloser を返します。 複数の File を同時に読み取ることができます。
type FileHeader ¶
type FileHeader struct { // Nameはファイルの名前です。 // // それは相対パスでなければならず、ドライブレター("C:"など)で始まってはならず、 // バックスラッシュの代わりにフォワードスラッシュを使用しなければなりません。末尾のスラッシュは // このファイルがディレクトリであり、データを持つべきではないことを示します。 Name string // Commentは64KiB未満の任意のユーザー定義文字列です。 Comment string // NonUTF8は、NameとCommentがUTF-8でエンコードされていないことを示します。 // // 仕様によれば、許可される他のエンコーディングはCP-437のみですが、 // 歴史的に多くのZIPリーダーはNameとCommentをシステムのローカル文字エンコーディングとして解釈します。 // // このフラグは、ユーザーが特定のローカライズされた地域の非ポータブルなZIPファイルをエンコードするつもりである場合にのみ設定するべきです。 // それ以外の場合、Writerは有効なUTF-8文字列のZIP形式のUTF-8フラグを自動的に設定します。 NonUTF8 bool CreatorVersion uint16 ReaderVersion uint16 Flags uint16 // Methodは圧縮方法です。ゼロの場合、Storeが使用されます。 Method uint16 // Modifiedはファイルの変更時間です。 // // 読み取り時には、レガシーなMS-DOSの日付フィールドよりも拡張タイムスタンプが優先され、 // 時間のオフセットがタイムゾーンとして使用されます。 // MS-DOSの日付のみが存在する場合、タイムゾーンはUTCとみなされます。 // // 書き込み時には、タイムゾーンに依存しない拡張タイムスタンプが常に出力されます。 // レガシーなMS-DOSの日付フィールドは、Modified時間の位置に従ってエンコードされます。 Modified time.Time // ModifiedTimeはMS-DOSでエンコードされた時間です。 // // Deprecated: 代わりにModifiedを使用してください。 ModifiedTime uint16 // ModifiedDateはMS-DOSでエンコードされた日付です。 // // Deprecated: 代わりにModifiedを使用してください。 ModifiedDate uint16 // CRC32は、ファイル内容のCRC32チェックサムです。 CRC32 uint32 // CompressedSizeは、ファイルの圧縮サイズ(バイト単位)です。 // ファイルの非圧縮または圧縮サイズが32ビットに収まらない場合、 // CompressedSizeは^uint32(0)に設定されます。 // // Deprecated: 代わりにCompressedSize64を使用してください。 CompressedSize uint32 // UncompressedSizeは、ファイルの非圧縮サイズ(バイト単位)です。 // ファイルの非圧縮または圧縮サイズが32ビットに収まらない場合、 // CompressedSizeは^uint32(0)に設定されます。 // // Deprecated: 代わりにUncompressedSize64を使用してください。 UncompressedSize uint32 // CompressedSize64は、ファイルの圧縮サイズ(バイト単位)です。 CompressedSize64 uint64 // UncompressedSize64は、ファイルの非圧縮サイズ(バイト単位)です。 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) AddFS ¶ added in v1.22.0
AddFS adds the files from fs.FS to the archive. It walks the directory tree starting at the root of the filesystem adding each file to the zip using deflate while maintaining the directory structure.
func (*Writer) Copy ¶ added in v1.17.0
Copy は、ファイル f( Reader から取得された)を w にコピーします。 これは、解凍、圧縮、および検証をバイパスして、生の形式で直接コピーします。
func (*Writer) Create ¶
Create は、指定された名前を使用してファイルを zip ファイルに追加します。 返される Writer にファイルの内容を書き込む必要があります。 ファイルの内容は、 Deflate メソッドを使用して圧縮されます。 名前は相対パスである必要があります。 ドライブレター(例:C:)または先頭のスラッシュで始まることはできず、 スラッシュのみが許可されます。 ファイルではなくディレクトリを作成するには、名前の末尾にスラッシュを追加します。 次の Writer.Create 、 Writer.CreateHeader 、または Writer.Close を呼び出す前に、ファイルの内容を io.Writer に書き込む必要があります。
func (*Writer) CreateHeader ¶
func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error)
CreateHeader は、ファイルメタデータに提供された FileHeader を使用して、zip アーカイブにファイルを追加します。 Writer は fh を所有し、そのフィールドを変更する可能性があります。 Writer.CreateHeader を呼び出した後、呼び出し元は fh を変更してはいけません。
これは、ファイルの内容を書き込む必要がある Writer を返します。 次の Writer.Create 、 Writer.CreateHeader 、 Writer.CreateRaw 、または Writer.Close を呼び出す前に、ファイルの内容を io.Writer に書き込む必要があります。
func (*Writer) CreateRaw ¶ added in v1.17.0
func (w *Writer) CreateRaw(fh *FileHeader) (io.Writer, error)
CreateRaw は、提供された FileHeader を使用して zip アーカイブにファイルを追加し、 ファイルの内容を書き込むための Writer を返します。 次の Writer.Create 、 Writer.CreateHeader 、 Writer.CreateRaw 、または Writer.Close を呼び出す前に、ファイルの内容を io.Writer に書き込む必要があります。
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 は、中央ディレクトリのコメントフィールドを設定します。 Writer.Close を呼び出す前にのみ呼び出すことができます。