メインコンテンツまでスキップ
バージョン: v20 R4 BETA

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

履歴
バージョン内容
v19 R3ZIP Compression LZMA, ZIP Compression XZ, .level プロパティを追加
v18追加

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

引数タイプ説明
fileToZip4D.File->圧縮する File または Folder オブジェクト
folderToZip4D.Folder->圧縮する File または Folder オブジェクト
zipStructureObject->圧縮する File または Folder オブジェクト
destinationFile4D.File->アーカイブの保存先ファイル
optionsInteger->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 オブジェクトを表すオブジェクトを引数として渡します。 以下のプロパティを利用して、このオブジェクトを定義することが可能です:

プロパティタイプ説明
compressionInteger
  • ZIP Compression standard: Deflate圧縮 (デフォルト)
  • ZIP Compression LZMA: LZMA圧縮
  • ZIP Compression XZ: XZ圧縮
  • ZIP Compression none: 圧縮なし
  • levelInteger圧縮レベル。 とりうる値: 1 - 10。 低い値ではファイルが大きくなり、高い値ではファイルが小さくなります。 ただし、圧縮レベルはパフォーマンスに影響します。 デフォルト値 (省略時):
  • ZIP Compression standard: 6
  • ZIP Compression LZMA: 4
  • ZIP Compression XZ: 4
  • encryptionIntegerパスワードが設定されていた場合に使用する暗号化方法:
  • ZIP Encryption AES128: 128-bit キーを使った AES による暗号化
  • ZIP Encryption AES192: 192-bit キーを使った AES による暗号化
  • ZIP Encryption AES256: 256-bit キーを使った AES による暗号化 (パスワードが設定されている場合のデフォルト)
  • ZIP Encryption none: 暗号化なし (パスワードが設定されてない場合のデフォルト)
  • passwordText暗号化が必要な場合に使用するパスワード
    filesCollection
  • 4D.File または 4D.Folder オブジェクトのコレクション
  • 以下のプロパティを持ったオブジェクトのコレクション:
  • プロパティタイプ説明
    source4D.File または 4D.FolderFile または Folder
    destinationText(任意) - アーカイブのコンテンツ構成を変更するための相対ファイルパス
    optionnumber(任意) - ZIP Ignore invisible files で非表示ファイルを無視、0 を渡すと全ファイルを圧縮
    callback4D.Function$1 に圧縮の進捗 (0 - 100) を受け取るコールバックフォーミュラ

    destinationFile には、作成する ZIPアーカイブ (名前や位置など) を記述する 4D.File オブジェクトを渡します。 作成した ZIPアーカイブがあらゆるソフトウェアで自動的に処理されるようにするため、".zip" 拡張子の使用が推奨されます。

    アーカイブが作成されると、ZIP Read archive を使用してアクセスすることができます。

    ステータスオブジェクト

    戻り値のステータスオブジェクトには、以下のプロパティが格納されています:

    プロパティタイプ説明
    statusTextTextエラーメッセージ (あれば):
  • ZIPアーカイブを開けません
  • ZIPアーカイブを作成できません
  • 暗号化にはパスワードが必要です
  • statusIntegerステータスコード
    successBooleanアーカイブが正常に作成された場合には 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:

     var $1 : Integer
    Progress SET PROGRESS(progID;Num($1/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)

    例題 5

    高い圧縮レベルの代替圧縮アルゴリズムを使用します:

    var $destination : 4D.File
    var $zip; $err : Object

    $zip:=New object
    $zip.files:=New collection
    $zip.files.push(Folder(fk desktop folder).folder("images"))
    $zip.compression:=ZIP Compression LZMA
    $zip.level:=7 // デフォルト値は 4 です

    $destination:=Folder(fk desktop folder).file("images.zip")
    $err:=ZIP Create archive($zip; $destination)

    ZIP Read archive

    履歴
    バージョン内容
    v18追加

    ZIP Read archive ( zipFile : 4D.File { ; password : Text }) : 4D.ZipArchive

    引数タイプ説明
    zipFile4D.File->ZIPアーカイブファイル
    passwordText->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 の関数とプロパティを使用することで操作可能です。

    このプロパティは 読み取り専用 です。