(例えばEメールで)ファイルを交換する前に、転送するサイズを小さくしたくて圧縮することがよくあります。4D v18を使えば、外部ライブラリーやツールを使わずにプログラムでファイルの圧縮解凍が可能です:
ファイルとフォルダの圧縮
新しいZip Create archivesコマンドは、ファイル、フォルダ、あるいはパラメータを使ったオブジェクト(例:アーカイブを読むためのパスワード)などを受け渡す場合に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 (progID;Num($1/100))
ファイルとフォルダの解凍
新しい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 ($files[$i].extension=".txt")
$txt:=$files[$i].getText()
Else
$blob:=$files[$i].getContent()
End if
アーカイブからファイルを解凍する
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
全てのファイルを解凍する
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))