ZIPArchive
4D ZIP アーカイブは、一つ以上のファイルまたはフォルダーを格納している File または Folder オブジェクトで、元のサイズより小さくなるように圧縮されているものをいいます。 これらのアーカイブは ".zip" 拡張子を持つように作成され、ディスクスペースの確保や、サイズ制限があるメディア (例: メールまたはネットワークなど) 経由のファイル転送を容易にする用途に使用できます。
- 4D ZIPアーカイブは ZIP Create archive コマンドで作成します。
 - 4D 
ZIPFileおよびZIPFolderインスタンスは、ZIP Read archive コマンドによって返されるオブジェクトのrootプロパティ (ZIPFolder) を通して利用可能です。 
例題
ZIPFile オブジェクトを取得し、その中身を確認します:
var $path; $archive : 4D.File
var $zipFile : 4D.ZipFile
var $zipFolder : 4D.ZipFolder
var $txt : Text
$path:=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$archive:=ZIP Read archive($path)
$zipFolder:=$archive.root // 圧縮ファイルのルートフォルダーを保存します
$zipFile:=$zipFolder.files()[0] // 最初のファイルを読み取ります
If($zipFile.extension=".txt")
 $txt:=$zipFile.getText()
End if
概要
| .root : 4D.ZipFolder ZIPアーカイブのコンテンツにアクセスするためのバーチャルフォルダーを格納します | 
ZIP Create archive
履歴
| リリース | 内容 | 
|---|---|
| 18 | 追加 | 
ZIP Create archive ( fileToZip : 4D.File ; destinationFile : 4D.File ) : Object
ZIP Create archive ( folderToZip : 4D.Folder ; destinationFile : 4D.File { ; options : Integer }) : Object
ZIP Create archive ( zipStructure : Object ; destinationFile : 4D.File ) : Object
| 引数 | 型 | 説明 | |
|---|---|---|---|
| fileToZip | 4D.File | -> | 圧縮する File または Folder オブジェクト | 
| folderToZip | 4D.Folder | -> | 圧縮する File または Folder オブジェクト | 
| zipStructure | Object | -> | 圧縮する File または Folder オブジェクト | 
| destinationFile | 4D.File | -> | アーカイブの保存先ファイル | 
| options | Integer | -> | folderToZip オプション: ZIP Without enclosing folder (外側のフォルダーを除外して ZIP圧縮をおこなう) | 
| 戻り値 | Object | <- | ステータスオブジェクト | 
|
説明
ZIP Create archive コマンドは、 圧縮された ZIPArchive オブジェクトを作成し、その処理のステータスを返します。
第1引数として、4D.File、4D.Folder、あるいは zipStructure オブジェクトを渡すことができます。
- 
fileToZip: 圧縮する
4D.Fileオブジェクトを引数として渡します。 - 
folderToZip: 圧縮する
4D.Folderを渡します。 この場合、任意の options 引数を渡して、フォルダーのコンテンツのみを圧縮 (つまり、外側のフォルダを除外) することができます。ZIP Create archiveはデフォルトで、フォルダーとその中身を圧縮するので、展開処理をしたときにはフォルダーを再作成します。 フォルダーの中身のみを解凍処理で復元するには、options 引数にZIP Without enclosing folder定数を渡します。 - 
zipStructure: ZIPArchive オブジェクトを表すオブジェクトを引数として渡します。 以下のプロパティを利用して、このオブジェクトを定義することが可能です:
 
| プロパティ | 型 | 説明 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| compression | Integer | ZIP Compression standard: Deflate圧縮 (デフォルト)ZIP Compression LZMA: LZMA圧縮ZIP Compression XZ: XZ圧縮ZIP Compression none: 圧縮なし | ||||||||||||
| level | Integer | 圧縮レベル。 とりうる値: 1 - 10。 低い値ではファイルが大きくなり、高い値ではファイルが小さくなります。 ただし、圧縮レベルはパフォーマンスに影響します。 デフォルト値 (省略時): ZIP Compression standard: 6ZIP Compression LZMA: 4ZIP Compression XZ: 4 | ||||||||||||
| encryption | Integer | パスワードが設定されていた場合に使用する暗号化方法:ZIP Encryption AES128: 128-bit キーを使った AES による暗号化ZIP Encryption AES192: 192-bit キーを使った AES による暗号化ZIP Encryption AES256: 256-bit キーを使った AES による暗号化 (パスワードが設定されている場合のデフォルト)ZIP Encryption none: 暗号化なし (パスワードが設定されてない場合のデフォルト) | ||||||||||||
| password | Text | 暗号化が必要な場合に使用するパスワード | ||||||||||||
| files | Collection | 4D.File または 4D.Folder オブジェクトのコレクション
  | ||||||||||||
| callback | 4D.Function | $1 に圧縮の進捗 (0 - 100) を受け取るコールバックフォーミュラ | 
destinationFile には、作成する ZIPアーカイブ (名前や位置など) を記述する 4D.File オブジェクトを渡します。 作成した ZIPアーカイブがあらゆるソフトウェアで自動的に処理されるようにするため、".zip" 拡張子の使用が推奨されます。
アーカイブが作成されると、ZIP Read archive を使用してアクセスすることができます。
ステータスオブジェクト
戻り値のステータスオブジェクトには、以下のプロパティが格納されています:
| プロパティ | 型 | 説明 | 
|---|---|---|
| statusText | Text | エラーメッセージ (あれば): | 
| status | Integer | ステータスコード | 
| success | Boolean | アーカイブが正常に作成された場合には true、それ以外は false | 
例題 1
4D.File を圧縮します:
 var $file; $destination : 4D.File
 var $status : Object
 $destination:=Folder(fk desktop folder).file("MyDocs/file.zip")
 $file:=Folder(fk desktop folder).file("MyDocs/text.txt")
 $status:=ZIP Create archive($file;$destination)
例題 2
フォルダー自体は圧縮せずに 4D.Folder の中身だけを圧縮します:
 var $folder : 4D.Folder
 var $destination : 4D.File
 var $status : Object
 $destination:=Folder(fk desktop folder).file("MyDocs/Images.zip")
 $folder:=Folder(fk desktop folder).folder("MyDocs/Images")
 $status:=ZIP Create archive($folder;$destination;ZIP Without enclosing folder)
例題 3
ZIPアーカイブの圧縮にパスワードと進捗バーを使います:
 var $destination : 4D.File
 var $zip;$status : Object
 var progID : Integer
 $destination:=Folder(fk desktop folder).file("MyDocs/Archive.zip")
 $zip:=New object
 $zip.files:=Folder(fk desktop folder).folder("MyDocs/Resources").folders()
 $zip.password:="password"
 $zip.callback:=Formula(myFormulaCompressingMethod($1))
 progID:=Progress New // 4D Progress コンポーネントを使います
 $status:=ZIP Create archive($zip;$destination)
 Progress QUIT(progID)
myFormulaCompressingMethod:
 #DECLARE ($current : Integer)
 Progress SET PROGRESS(progID;Num($current /100))
例題 4
zipStructure オブジェクトに、圧縮したいフォルダーとファイルを格納したコレクションを渡します:
 var $destination : 4D.File
 var $zip;$err : Object
 $zip:=New object
 $zip.files:=New collection
 $zip.files.push(New object("source";Folder(fk desktop folder).file("Tests/text.txt")))
 $zip.files.push(New object("source";Folder(fk desktop folder).file("Tests/text2.txt")))
 $zip.files.push(New object("source";Folder(fk desktop folder).file("Images/image.png")))
 $destination:=Folder(fk desktop folder).file("file.zip")
 $err:=ZIP Create archive($zip;$destination)
ZIP Read archive
履歴
| リリース | 内容 | 
|---|---|
| 18 | 追加 | 
ZIP Read archive ( zipFile : 4D.File { ; password : Text }) : 4D.ZipArchive
| 引数 | 型 | 説明 | |
|---|---|---|---|
| zipFile | 4D.File | -> | ZIPアーカイブファイル | 
| password | Text | -> | ZIPアーカイブのパスワード (必要であれば) | 
| 戻り値 | 4D.ZipArchive | <- | アーカイブオブジェクト | 
|
説明
ZIP Read archive コマンドは、 zipFile のコンテンツを取得し、4D.ZipArchive オブジェクト形式で返します。
このコマンドは ZIPアーカイブを展開することはしません。その中身に関する情報を提供するのみです。 アーカイブのコンテンツを取り出すには、file.copyTo() あるいは folder.copyTo() などの関数を使用します。
zipFile 引数として、圧縮された ZIPアーカイブを参照している 4D.File オブジェクトを渡します。 ターゲットのアーカイブファイルは ZIP Read archive が実行を終えるまで (全コンテンツ/参照が取得/解放されるまで) は開いた状態となり、その後自動的に閉じられます。
zipFile 引数で指定した ZIPファイルがパスワードで保護されていた場合、任意の password 引数を渡してパスワードを提供する必要があります。 パスワードが必要にも関わらず、コンテンツ読み出し時にパスワードが提示されなかった場合、エラーが生成されます。
アーカイブオブジェクト
戻り値の 4D.ZipArchive オブジェクトは単一の root プロパティを格納しており、その値は 4D.ZipFolder オブジェクトです。 このフォルダーは ZIPアーカイブの全コンテンツを表します。
例題
ZIPFile オブジェクトを取得し、その中身を確認します:
 var $archive : 4D.ZipArchive
 var $path : 4D.File
 $path:=Folder(fk desktop folder).file("MyDocs/Archive.zip")
 $archive:=ZIP Read archive($path)
アーカイブ内のファイルとフォルダーの一覧を取得します:
 $folders:=$archive.root.folders()
 $files:=$archive.root.files()
ファイルのコンテンツを、root フォルダーから取り出すことなく読み出します:
 If($files[$i].extension=".txt")
    $txt:=$files[$i].getText()
 Else
    $blob:=$files[$i].getContent()
 End if
root フォルダーから取り出します:
  // 特定のファイルを取得します
 $folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
  // すべてのファイルを取得します
 $folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MyDocs"))
.root
.root : 4D.ZipFolder
説明
.root プロパティは、 ZIPアーカイブのコンテンツにアクセスするためのバーチャルフォルダーを格納します。
root フォルダーとそのコンテンツは、ZipFile および ZipFolder の関数とプロパティを使用することで操作可能です。
このプロパティは 読み取り専用 です。