ファイルをやり取りする前(例えばメールなど)に、ファイルを圧縮してサイズを小さくしてから送信することがよくあります。4D v18では、外部のライブラリやツールを使わずに、プログラミングでファイルの圧縮と解凍ができます。ここでは、それを可能にする新しいコマンドを紹介します。
ファイルとフォルダーを圧縮する
新しい Zip Create archiveコマンドは、ファイル、フォルダ、またはパラメータ(例えば、アーカイブを読むためのパスワード)を持つオブジェクトのいずれかを渡すことによって、ZIP アーカイブを作成することができます。
ファイルを圧縮する。
C_OBJECT($file;$destination)
$destination :=Folder(fk desktop folder).file("MyDocs/file.zip")
$file :=Folder(fk desktop folder).file("MyDocs/text.txt")
ZIP Create archive ($file;$destination)
フォルダーを圧縮する。
C_OBJECT($folder;$destination)
$destination :=Folder(fk desktop folder).file("MyDocs/Images.zip")
$folder :=Folder(fk desktop folder).folder("MyDocs/Images")
ZIP Create archive ($folder;$destination)
パスワードとプログレスバーで圧縮する。
C_OBJECT($zip)
$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(FormulaCompressing ($1))
progID :=Progress New
ZIP Create archive (
$zip;$destination)
Progress QUIT (progID)
FormulaCompressing メソッドです。
Progress SET PROGRESS ( ; ( /100))progIDNum$1
ファイルやフォルダの圧縮を解除する
新しい ZIP Read archiveコマンドはアーカイブ・オブジェクトを返します。このオブジェクトを操作することで、アーカイブ内のファイル一覧を取得したり、特定のファイルを抽出したり、アーカイブ全体を抽出したりすることが簡単にできます。
アーカイブの内容を読み込む
C_OBJECT($archive;$path)
)
$path :=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$archive :=ZIP Read archive($path
ファイル・フォルダの一覧を取得する
$folders:=$archive.root.folders()
$files :=$archive.root.files()
ファイルの内容を抽出せずに読み取る
If ( [$i]. =".txt") := [$i].() := [$i].()$filesextension
$txt$filesgetText
Else
$blob$filesgetContent
End if
アーカイブからファイルを取り出す
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
すべてのファイルを取り出す
$folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MyDocs"))