デルファイで圧縮および圧縮する簡単な方法を探しています。私はすでにtorrydelphiのコンポーネントを見てきました:http://www.torry.net/pages.php? s = 99。それらはすべて、私が望むことを達成するように見えますが、それらを使用することのいくつかの欠点は、それらのどれもdelphi 2009で実行されず、非常に複雑であるため、delphi2009に移植するのが難しいことです。少なくとも私にとっては、それらは不足しています。大量のDLLを使用するオーバーヘッドのない基本的なzip機能が必要です。私の探求は、問題を解決したと思っていたFSCTL_SET_COMPRESSIONに私を導きましたが、残念ながらこれも機能しませんでした。CREATEFILEは、試してみるまでFSCTL_SETと同じ結果が得られるまで、有望に見えました...Windowsにはいくつかの制限されたネイティブzip機能があることを知っています。たとえば、ファイルまたはフォルダを右クリックして[-> sendTo]-> [zip形式のフォルダ]を選択すると、圧縮されたアーカイブがスマートに作成されます。デルファイからその機能にアクセスできれば、それが解決策になると思います。副次的な問題として、Linuxにはこれと同様に使用できる独自のネイティブzip関数がありますか?
5 に答える
TurboPower の優れた Abbrevia は D2009 用にここからダウンロードできます。D2010 のサポートは進行中であり、フォーラムによるとsvn で既に利用可能です。
Abbrevia は商用 ($$$ 用) 製品でした。つまり、ドキュメントは完全です。
個人的には、D2009およびD2010で完全に動作するVCLZipを使用しています。この投稿の時点では120ドルかかりますが、非常にシンプルで柔軟性があり、何よりも高速です。
VCLZIPをご覧になり、興味があればトレイルをダウンロードしてください
コード的に:
VCLZip1.ZipName := ‘myfiles.zip’;
VCLZip1.FilesList.add(‘c:\mydirectory\*.*’);
VCLZip1.Zip;
基本的なzipに必要なのはこれだけです。もちろん、圧縮レベル、ディレクトリ構造、zipストリーム、解凍ストリームなどを設定できます。
これがお役に立てば幸いです。
RE
このOpenSource SynZip unitを見てください。Delphi に同梱されているデフォルト ユニットよりも解凍が高速であり、より小さな exe が生成されます(起動時に crc テーブルが作成されます)。
外部 dll は必要ありません。Delphi 6 から XE まで動作します。Delphi の Unicode バージョンでは問題ありません。すべてが 1 つのユニットに。
Win-Ansi 文字セットだけでなく、すべての Unicode 文字で、Zip コンテンツ内の Unicode ファイル名を処理するためにいくつかの変更を加えました。フィードバックは大歓迎です。
私はジップフォージを使っています。これらを D2009 に移植する際に問題があるのはなぜですか? 64bitだからですか??
ここにいくつかのサンプルコードがあります
procedure ZipIt;
var
Archiver: TZipForge;
FileName: String;
begin
try
Archiver:= TZipForge.create(self);
with Archiver do begin
FileName := 'c:\temp\myzip.zip';
// Create a new archive file
OpenArchive(fmCreate);
// Set path to folder with some text files to BaseDir
BaseDir := 'c:\temp\';
// Add all files and directories from 'C:\SOURCE_FOLDER' to the archive
AddFiles('myfiletozip.txt');
// Close the archive
CloseArchive;
end;
finally
Archiver.Free;
end;
end;
Delphi から COM を「実行」できる場合は、Windows シェルに組み込まれている zip 機能を利用できます。それはあなたに良い基本的な能力を与えます。
VBScript では、次のようになります。
Sub CreateZip(pathToZipFile, dirToZip)
WScript.Echo "Creating zip (" & pathToZipFile & ") from folder (" & dirToZip & ")"
Dim fso
Set fso= Wscript.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(pathToZipFile) Then
WScript.Echo "That zip file already exists - deleting it."
fso.DeleteFile pathToZipFile
End If
If Not fso.FolderExists(dirToZip) Then
WScript.Echo "The directory to zip does not exist."
Exit Sub
End If
NewZip pathToZipFile
dim sa
set sa = CreateObject("Shell.Application")
Dim zip
Set zip = sa.NameSpace(pathToZipFile)
WScript.Echo "opening dir (" & dirToZip & ")"
Dim d
Set d = sa.NameSpace(dirToZip)
For Each s In d.items
WScript.Echo s
Next
' http://msdn.microsoft.com/en-us/library/bb787866(VS.85).aspx
' ===============================================================
' 4 = do not display a progress box
' 16 = Respond with "Yes to All" for any dialog box that is displayed.
' 128 = Perform the operation on files only if a wildcard file name (*.*) is specified.
' 256 = Display a progress dialog box but do not show the file names.
' 2048 = Version 4.71. Do not copy the security attributes of the file.
' 4096 = Only operate in the local directory. Don't operate recursively into subdirectories.
WScript.Echo "copying files..."
zip.CopyHere d.items, 4
' wait until finished
sLoop = 0
Do Until d.Items.Count <= zip.Items.Count
Wscript.Sleep(1000)
Loop
End Sub
COMでは、パスワードで暗号化された zip、zip64、自己解凍型アーカイブ、Unicode、スパン zip などを実行する無料ダウンロードの DotNetZipも使用できます。