Delphi を使用して Windows XP の圧縮 (Zip 形式) フォルダを作成できますか?
9 に答える
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 コード サンプルのファイルを圧縮するを参照してください。
このOpenSource SynZip unitを見てください。Delphi に同梱されているデフォルト ユニットよりも解凍が高速であり、より小さな exe ファイルが生成されます(CRC テーブルは起動時に作成されます)。
外部 dll は必要ありません。Delphi 6 から XE まで動作します。Delphi の Unicode バージョンでは問題ありません。すべてが 1 つのユニットに。
Win-Ansi 文字セットだけでなく、すべての Unicode 文字で、Zip コンテンツ内の Unicode ファイル名を処理するためにいくつかの変更を加えました。フィードバックは大歓迎です。
少し前に、私は見つけることができるすべての 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;
現在オープンソースになっているTurboPower Abbreviaを使用できます。
Windows の「圧縮された」フォルダは、標準の zip ライブラリを使用して圧縮された .ZIP ファイルにすぎません。圧縮フォルダは別の動物であり、NTFS ディスク フォーマットが必要です。
「Zip」ファイルについては、オープンソースでうまく機能するTurbo Power Abbreviaを強くお勧めします。Delphi 2009 を使用している場合は、より新しいコピーである可能性があるため、この代替サイトを確認することをお勧めします。
圧縮フォルダ オプションを使用する場合は、ディレクトリ ハンドルのディレクトリ フラグを変更する必要があります。これは、そのディレクトリに追加された新しいファイルにのみ影響し、既存のファイルを自動的に圧縮しません。圧縮しようとしている既存のディレクトリがある場合は、既存の各ファイルの名前を変更し、それを元の名前にロードして保存し、それぞれの処理が完了したら元のファイルを削除します。Yozey には、MSDNドキュメントへの適切なリンクがありました。これは NTFS フォーマットのディスクでのみ機能するため、コードにチェックを追加する必要があることに注意してください。
これらを見てください: