github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/archive/tar/writer.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package tar 6 7 import ( 8 "github.com/shogo82148/std/io" 9 "github.com/shogo82148/std/io/fs" 10 ) 11 12 // Writerはtarアーカイブの順次書き込みを提供します。 13 // [Writer.WriteHeader] は提供された [Header] で新しいファイルを開始し、 14 // その後、Writerはそのファイルのデータを提供するためのio.Writerとして扱うことができます。 15 type Writer struct { 16 w io.Writer 17 pad int64 18 curr fileWriter 19 hdr Header 20 blk block 21 22 // err is a persistent error. 23 // It is only the responsibility of every exported method of Writer to 24 // ensure that this error is sticky. 25 err error 26 } 27 28 // NewWriterはwに書き込む新しいWriterを作成します。 29 func NewWriter(w io.Writer) *Writer 30 31 // Flushは現在のファイルのブロックパディングの書き込みを終了します。 32 // Flushを呼び出す前に、現在のファイルは完全に書き込まれている必要があります。 33 // 34 // これは、次の [Writer.WriteHeader] または [Writer.Close] の呼び出しで 35 // ファイルのパディングが暗黙的にフラッシュされるため、不要です。 36 func (tw *Writer) Flush() error 37 38 // WriteHeaderはhdrを書き込み、ファイルの内容を受け入れる準備をします。 39 // Header.Sizeは、次のファイルの書き込み可能なバイト数を決定します。 40 // 現在のファイルが完全に書き込まれていない場合、エラーが返されます。 41 // これにより、ヘッダを書き込す前に必要なパディングが暗黙的にフラッシュされます。 42 func (tw *Writer) WriteHeader(hdr *Header) error 43 44 // AddFSは、fs.FSからファイルをアーカイブに追加します。 45 // ファイルシステムのルートから開始してディレクトリツリーを走査し、 46 // 各ファイルをtarアーカイブに追加しながらディレクトリ構造を維持します。 47 func (tw *Writer) AddFS(fsys fs.FS) error 48 49 // Writeは、tarアーカイブの現在のファイルに書き込みます。 50 // [Writer.WriteHeader] の後にHeader.Sizeバイト以上が書き込まれた場合、Writeは [Writer.WriteHeader] エラーを返します。 51 // 52 // [TypeLink] 、 [TypeSymlink] 、 [TypeChar] 、 [TypeBlock] 、 [TypeDir] 、 [TypeFifo] などの特殊なタイプでWriteを呼び出すと、 53 // [Header.Size] が示す内容に関係なく、(0, [ErrWriteTooLong])が返されます。 54 func (tw *Writer) Write(b []byte) (int, error) 55 56 // Closeはパディングをフラッシュし、フッターを書き込むことでtarアーカイブを閉じます。 57 // (以前の [Writer.WriteHeader] の呼び出しで)現在のファイルが完全に書き込まれていない場合、エラーが返されます。 58 func (tw *Writer) Close() error