github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/archive/zip/struct.go (about)

     1  // Copyright 2010 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  /*
     6  Package zip は、ZIP アーカイブの読み書きをサポートします。
     7  
     8  詳細については、[ZIP specification] を参照してください。
     9  
    10  このパッケージはディスクスパニングをサポートしていません。
    11  
    12  ZIP64 についての注意点:
    13  
    14  後方互換性を保つために、FileHeader には 32 ビットと 64 ビットの両方の Size フィールドがあります。
    15  64 ビットフィールドには常に正しい値が含まれ、通常のアーカイブでは両方のフィールドが同じ値になります。
    16  ZIP64 形式が必要なファイルの場合、32 ビットフィールドは 0xffffffff になり、代わりに 64 ビットフィールドを使用する必要があります。
    17  
    18  [ZIP specification]: https://support.pkware.com/pkzip/appnote
    19  */
    20  package zip
    21  
    22  import (
    23  	"github.com/shogo82148/std/io/fs"
    24  	"github.com/shogo82148/std/time"
    25  )
    26  
    27  // 圧縮方式
    28  const (
    29  	Store   uint16 = 0
    30  	Deflate uint16 = 8
    31  )
    32  
    33  // FileHeader は、ZIP ファイル内のファイルを説明します。
    34  // 詳細については、[ZIP specification] を参照してください。
    35  //
    36  // [ZIP specification]: https://support.pkware.com/pkzip/appnote
    37  type FileHeader struct {
    38  	// Nameはファイルの名前です。
    39  	//
    40  	// それは相対パスでなければならず、ドライブレター("C:"など)で始まってはならず、
    41  	// バックスラッシュの代わりにフォワードスラッシュを使用しなければなりません。末尾のスラッシュは
    42  	// このファイルがディレクトリであり、データを持つべきではないことを示します。
    43  	Name string
    44  
    45  	// Commentは64KiB未満の任意のユーザー定義文字列です。
    46  	Comment string
    47  
    48  	// NonUTF8は、NameとCommentがUTF-8でエンコードされていないことを示します。
    49  	//
    50  	// 仕様によれば、許可される他のエンコーディングはCP-437のみですが、
    51  	// 歴史的に多くのZIPリーダーはNameとCommentをシステムのローカル文字エンコーディングとして解釈します。
    52  	//
    53  	// このフラグは、ユーザーが特定のローカライズされた地域の非ポータブルなZIPファイルをエンコードするつもりである場合にのみ設定するべきです。
    54  	// それ以外の場合、Writerは有効なUTF-8文字列のZIP形式のUTF-8フラグを自動的に設定します。
    55  	NonUTF8 bool
    56  
    57  	CreatorVersion uint16
    58  	ReaderVersion  uint16
    59  	Flags          uint16
    60  
    61  	// Methodは圧縮方法です。ゼロの場合、Storeが使用されます。
    62  	Method uint16
    63  
    64  	// Modifiedはファイルの変更時間です。
    65  	//
    66  	// 読み取り時には、レガシーなMS-DOSの日付フィールドよりも拡張タイムスタンプが優先され、
    67  	// 時間のオフセットがタイムゾーンとして使用されます。
    68  	// MS-DOSの日付のみが存在する場合、タイムゾーンはUTCとみなされます。
    69  	//
    70  	// 書き込み時には、タイムゾーンに依存しない拡張タイムスタンプが常に出力されます。
    71  	// レガシーなMS-DOSの日付フィールドは、Modified時間の位置に従ってエンコードされます。
    72  	Modified time.Time
    73  
    74  	// ModifiedTimeはMS-DOSでエンコードされた時間です。
    75  	//
    76  	// Deprecated: 代わりにModifiedを使用してください。
    77  	ModifiedTime uint16
    78  
    79  	// ModifiedDateはMS-DOSでエンコードされた日付です。
    80  	//
    81  	// Deprecated: 代わりにModifiedを使用してください。
    82  	ModifiedDate uint16
    83  
    84  	// CRC32は、ファイル内容のCRC32チェックサムです。
    85  	CRC32 uint32
    86  
    87  	// CompressedSizeは、ファイルの圧縮サイズ(バイト単位)です。
    88  	// ファイルの非圧縮または圧縮サイズが32ビットに収まらない場合、
    89  	// CompressedSizeは^uint32(0)に設定されます。
    90  	//
    91  	// Deprecated: 代わりにCompressedSize64を使用してください。
    92  	CompressedSize uint32
    93  
    94  	// UncompressedSizeは、ファイルの非圧縮サイズ(バイト単位)です。
    95  	// ファイルの非圧縮または圧縮サイズが32ビットに収まらない場合、
    96  	// CompressedSizeは^uint32(0)に設定されます。
    97  	//
    98  	// Deprecated: 代わりにUncompressedSize64を使用してください。
    99  	UncompressedSize uint32
   100  
   101  	// CompressedSize64は、ファイルの圧縮サイズ(バイト単位)です。
   102  	CompressedSize64 uint64
   103  
   104  	// UncompressedSize64は、ファイルの非圧縮サイズ(バイト単位)です。
   105  	UncompressedSize64 uint64
   106  
   107  	Extra         []byte
   108  	ExternalAttrs uint32
   109  }
   110  
   111  // FileInfo は、[FileHeader] の fs.FileInfo を返します。
   112  func (h *FileHeader) FileInfo() fs.FileInfo
   113  
   114  // FileInfoHeaderは、fs.FileInfoから部分的に設定された [FileHeader] を作成します。
   115  // fs.FileInfoのNameメソッドは、記述するファイルのベース名のみを返すため、
   116  // ファイルの完全なパス名を提供するために、返されたヘッダーのNameフィールドを変更する必要がある場合があります。
   117  // 圧縮が必要な場合は、呼び出し元はFileHeader.Methodフィールドを設定する必要があります。デフォルトでは設定されていません。
   118  func FileInfoHeader(fi fs.FileInfo) (*FileHeader, error)
   119  
   120  // ModTime は、旧来の ModifiedDate および [ModifiedTime] フィールドを使用して、UTC での変更時刻を返します。
   121  //
   122  // Deprecated: 代わりに [Modified] を使用してください。
   123  func (h *FileHeader) ModTime() time.Time
   124  
   125  // SetModTime は、与えられた時刻を UTC で指定して、 [Modified] 、 [ModifiedTime] 、および [ModifiedDate] フィールドを設定します。
   126  //
   127  // Deprecated: 代わりに [Modified] を使用してください。
   128  func (h *FileHeader) SetModTime(t time.Time)
   129  
   130  // Mode は、 [FileHeader] のパーミッションとモードビットを返します。
   131  func (h *FileHeader) Mode() (mode fs.FileMode)
   132  
   133  // SetMode は、 [FileHeader] のパーミッションとモードビットを変更します。
   134  func (h *FileHeader) SetMode(mode fs.FileMode)