2

デルファイで圧縮および圧縮する簡単な方法を探しています。私はすでに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関数がありますか?

4

5 に答える 5

4

TurboPower の優れた Abbrevia は D2009 用にここからダウンロードできます。D2010 のサポートは進行中であり、フォーラムによるとsvn で既に利用可能です。

Abbrevia は商用 ($$$ 用) 製品でした。つまり、ドキュメントは完全です。

于 2009-10-27T23:38:23.280 に答える
0

個人的には、D2009およびD2010で完全に動作するVCLZipを使用しています。この投稿の時点では120ドルかかりますが、非常にシンプルで柔軟性があり、何よりも高速です。

VCLZIPをご覧になり、興味があればトレイルをダウンロードしてください

コード的に:

VCLZip1.ZipName := ‘myfiles.zip’;
VCLZip1.FilesList.add(‘c:\mydirectory\*.*’);
VCLZip1.Zip;

基本的なzipに必要なのはこれだけです。もちろん、圧縮レベル、ディレクトリ構造、zipストリーム、解凍ストリームなどを設定できます。

これがお役に立てば幸いです。

RE

于 2009-10-29T18:04:06.013 に答える
0

このOpenSource SynZip unitを見てください。Delphi に同梱されているデフォルト ユニットよりも解凍が高速であり、より小さな exe が生成されます(起動時に crc テーブルが作成されます)。

外部 dll は必要ありません。Delphi 6 から XE まで動作します。Delphi の Unicode バージョンでは問題ありません。すべてが 1 つのユニットに。

Win-Ansi 文字セットだけでなく、すべての Unicode 文字で、Zip コンテンツ内の Unicode ファイル名を処理するためにいくつかの変更を加えました。フィードバックは大歓迎です。

于 2011-05-18T06:09:00.833 に答える
0

私はジップフォージを使っています。これらを 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;
于 2009-10-28T00:06:51.873 に答える
0

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も使用できます。

于 2009-10-28T00:16:02.670 に答える