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)