4D-jp 4D Japan Technical Support Team

コマンドでファイルとフォルダの圧縮と解凍

2019-12-03
Vanessa Talbot

project-database-stylesheet

(例えばEメールで)ファイルを交換する前に、転送するサイズを小さくしたくて圧縮することがよくあります。4D v18を使えば、外部ライブラリーやツールを使わずにプログラムでファイルの圧縮解凍が可能です:

ZIP圧縮と解凍

ファイルとフォルダの圧縮

新しい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"))


関連記事

リンク