| C++ Builder Snippets |
|
Dateien komprimieren, ZIP-Dateien erzeugen: |
|
Es gibt viele Komponenten für Delphi und C++ Builder, mit deren Hilfe ZIP-Dateien
erzeugt bzw. entpackt werden können. Die meisten davon verwenden kostenlose
platformunabhängige Bibliothek ZLIB
von Jean-loup Gailly und Mark Adler. Folgendes Beispiel zeigt, wie die ZLIB (Ver. 1.2.3) in eine "stand alone" C++ Builder-Anwendung ohne zusätzliche DLLs integriert werden kann. ![]() Komprimierung sowie das Enpacken von Dateien erfolgt über eine kleine "Wrapper-Klasse" TZipObj, die die eigentlichen Aufrufe der ZLIB-Bibliothek kapselt. Zusätzlich stellt TZipObj Events zu Implementierung der Fortschrittsanzeige und zur Ausgabe von Statusmeldungen zur Verfügung. Um die TZipObj-Klasse in Ihre Projekte zu transferieren, kopieren Sie die Dateien TZipObj.h und TZipObj.cpp aus dem Root-Verzeichnis des Beispielprojekts, sowie das Unterverzeichnis \ZLIB mit Bibliotheksquellcode in Ihr Projektverzeichnis und fügen Sie die TZipObj.cpp, sowie alle *.C Dateien des ZLIB-Verzeichnisses über den BCB-Menüpunkt "Projekt -> Dem Projekt hinzufügen..." Ihrem Projekt hinzu. Anwendungsbeispiel (Erzeugen von ZIP-Dateien): TZipObj* pZip = new TZipObj; TStringList* pFiles = new TStringList; if(pZip != NULL && pFiles != NULL ) { pFiles->Add("c:\\test.txt"); pFiles->Add("f:\\abc.exe"); pFiles->Add("d:\\archiv\\123.dll"); pZip->CompressFiles(pFiles ,"c:\\output.zip",7, false); delete pFiles; delete pZip; } Anwendungsbeispiel (Entpacken von ZIP-Dateien): TZipObj* pZip = new TZipObj; if(pZip != NULL) { // assign status eventhandler pZip->OnZipStatus = ZipStatus; // assign total progress eventhandler pZip->OnZipProgress = ZipProgress; // assign current file progress eventhandler pZip->OnZipFileProgress = ZipFileProgress; // extract defined file(s): pZip->UncompressFile( sgZipFile, // source zip archive file psllFiles->Text, // file(s) to extract (separated // by CRLF if more than one) editOutputDir->Text, // target directory true, // Flag 'Extract!' chkOverwrite->Checked, // flag "overwrite existing files" chkExtractWithoutPath->Checked, // "extract without path" flag lvArchiveContent); // Pointer to ListView with archive info delete pZip; }Für die Implementierung der Fortschritts- und Statusanzeigen, müssen die entsprechenden Ereignisbehandlungsroutinen erstellt, in der Header- Datei des Formulars deklariert und der TZipObj-Instanz vor dem Aufruf von CompressFiles() bzw. UncompressFiles() zugewiesen werden: //--------------------------------------------------------------------------- // Eventhandler für das OnZipProgress-Ereignis //--------------------------------------------------------------------------- void __fastcall TForm1::ZipProgress(TObject* Sender, int Percent) { ProgressBar1->Position = Percent; LabelArchiveProgress->Caption = IntToStr(Percent) + " %"; } //--------------------------------------------------------------------------- // Eventhandler für das OnZipFileProgress-Ereignis //--------------------------------------------------------------------------- void __fastcall TForm1::ZipFileProgress(TObject* Sender, int Percent) { ProgressBar2->Position = Percent; LabelFileProgress->Caption = IntToStr(Percent) + " %"; Application->ProcessMessages(); } //--------------------------------------------------------------------------- // Eventhandler für das OnZipStatus-Ereignis //--------------------------------------------------------------------------- void __fastcall TForm1::ZipStatus(TObject* Sender, AnsiString slMessage, int ilStatusId) { Memo1->Lines->Add(slMessage); StatusBar1->SimpleText = slMessage; } |
|
Download BCB6 Projekt-Quellcode |
|
Download Demo-Exe |
| © '99-2005 by S. Kreutzmann |