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