12

Delphi を使用して Windows XP の圧縮 (Zip 形式) フォルダを作成できますか?

4

9 に答える 9

5

Eggheadcafeのスレッドによると、CreateFile 関数を使用FILE_FLAG_BACKUP_SEMANTICSして圧縮フォルダーを作成できます。

シェル拡張ルートについては、VB で記述された Namespace Edanmo によるWindows XP "Compressed Folder" shell extension to work with .zip filesを参照してください。

C ++で尋ねられた同様の質問を見つけました。C/C++ での Windows (XP/2003) での ZIP ファイルの作成 をご覧ください。最も簡単な方法は ZipForge を購入することだと思います。Delphi コード サンプルのファイルを圧縮するを参照してください。

于 2009-07-04T18:43:38.610 に答える
4

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

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

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

于 2011-05-18T06:09:50.960 に答える
4

少し前に、私は見つけることができるすべての Delphi 圧縮ライブラリを試しましたが、最終的にKiril Antonovの KaZipを使用することになりました。

私の要件は次のとおりです。

  • 無料;
  • オープンソース;
  • ネイティブの Delphi コード。
  • 外部依存関係 (dll、exe) はありません。私の最も重要な要件。
  • 小さなメモリフットプリント;
  • 使いやすい;

主に .kml ファイルを .kmz に変換するために使用しますが、驚くほど高速です。

これが私がそれをどのように使用するかの例です:

uses
  KaZip;

...

// replaces a .kml file with a .kmz file
procedure KmlToKmz(const aFileName: string);
var
  FS: TFileStream;
  KaZip:TKaZip;
  KmzFileName:TFileName;
begin
  KmzFileName := ChangeFileExt(aFileName, '.kmz');
  KaZip := TKaZip.Create(nil);
  try
    // create an empty zipfile with .kmz extension:
    FS := TFileStream.Create(KmzFileName, fmOpenReadWrite or FmCreate);
    try
      KaZip.CreateZip(FS);
    finally
      FS.Free;
    end;        

    KaZip.Open(KmzFileName); // Open the new .kmz zipfile
    KaZip.Entries.AddFile(aFileName); // add the .kml
    KaZip.Close; 
    DeleteFile(aFileName); // delete the .kml
  finally
    KaZip.Free;
  end;
end;
于 2009-07-05T07:17:52.617 に答える
3

現在オープンソースになっているTurboPower Abbreviaを使用できます。

于 2009-07-04T20:04:07.227 に答える
2

Windows の「圧縮された」フォルダは、標準の zip ライブラリを使用して圧縮された .ZIP ファイルにすぎません。圧縮フォルダは別の動物であり、NTFS ディスク フォーマットが必要です。

「Zip」ファイルについては、オープンソースでうまく機能するTurbo Power Abbreviaを強くお勧めします。Delphi 2009 を使用している場合は、より新しいコピーである可能性があるため、この代替サイトを確認することをお勧めします。

圧縮フォルダ オプションを使用する場合は、ディレクトリ ハンドルのディレクトリ フラグを変更する必要があります。これは、そのディレクトリに追加された新しいファイルにのみ影響し、既存のファイルを自動的に圧縮しません。圧縮しようとしている既存のディレクトリがある場合は、既存の各ファイルの名前を変更し、それを元の名前にロードして保存し、それぞれの処理が完了したら元のファイルを削除します。Yozey には、MSDNドキュメントへの適切なリンクがありました。これは NTFS フォーマットのディスクでのみ機能するため、コードにチェックを追加する必要があることに注意してください。

于 2009-07-06T16:34:09.500 に答える
1

7zipなどの任意のコンプレッサーのコマンドラインバージョンを使用してShellExecuteを使用してタスクを実行するか、これらのいずれかのような無料または商用コンポーネントを使用できます。

私はZipMasterを使用していましたが、私の目的には非常によく動作します。サイズ、スペース、パフォーマンスの要件はわかりません。

于 2009-07-04T19:28:26.520 に答える
1

これらを見てください:

于 2009-07-04T20:12:11.563 に答える