Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Noch mal zu Zip Archiven (https://www.delphipraxis.net/59573-noch-mal-zu-zip-archiven.html)

mOzZzI 24. Dez 2005 17:56


Noch mal zu Zip Archiven
 
Hallo :hi:
so jetzt habe ich eine gute Zip Komponente gefunden...ZipForge
Jetzt ,öchte ich mithilfe einer ListBox oder ListView oder...
Dateien öffnen und dann wenn man auf einen Button klickt, das dann diese
Dateien die sich in der ListBox oder ListView...befinden und ein Zip Archiv bilden...
Leider komme ich nicht klar damit...könnte mir jemand helfen??
Mfg ..:mozZzI:..

BeBored 24. Dez 2005 20:24

Re: Noch mal zu Zip Archiven
 
So habe ich das bei mir gemacht:

Delphi-Quellcode:
var
  index: integer;
begin
ZipForge1.FileName := 'C:\Archiv.zip';
ZipForge1.OpenArchive(fmCreate);
for index := 0 to Listbox1.Items.Count - 1 do
  begin
    ZipForge1.BaseDir := Listbox1.Items.Count[index];
    ZipForge1.AddFiles('*.*');
  end;
ZipForge1.CloseArchive;
end;
Grüsse

Matthias

mOzZzI 24. Dez 2005 20:35

Re: Noch mal zu Zip Archiven
 
Deinen Code verstehe ich, aber bei mir spuckt er eine Fehlermeldung aus...

Delphi-Quellcode:
...
procedure TForm1.Button2Click(Sender: TObject);
var
  index: integer;
begin
ZipForge1.FileName := 'C:\Archiv.zip';
ZipForge1.OpenArchive(fmCreate);
for index := 0 to Listbox1.Items.Count - 1 do //<<<Array-Typ erforderlich
  begin
    ZipForge1.BaseDir := Listbox1.Items.Count[index];
    ZipForge1.AddFiles('*.*');
  end;
ZipForge1.CloseArchive;
end;
Mfg
mozZzI

Der_Unwissende 24. Dez 2005 22:05

Re: Noch mal zu Zip Archiven
 
Hi,
dein Fehler liegt eine Zeile tiefer :
Delphi-Quellcode:
    ZipForge1.BaseDir := Listbox1.Items.Count[index];
ListBox1.Items.Count ist natürlich eine Zahl, ersetz mal das Count durch ein Strings dann klappt das sicher auch.

Gruß Der Unwissende

BeBored 24. Dez 2005 22:54

Re: Noch mal zu Zip Archiven
 
Huch ja sicher, hab das Count aus versehen mit reingehauen, ist bei mir ohne Count. :duck:

mOzZzI 25. Dez 2005 01:40

Re: Noch mal zu Zip Archiven
 
Liste der Anhänge anzeigen (Anzahl: 1)
Genau, des wars...
programm läuft und speichert auch ein zip archiv, doch ohne inhalt :shock:
Komisch was passt da nicht??

Der_Unwissende 25. Dez 2005 12:17

Re: Noch mal zu Zip Archiven
 
Hm, also erstmal meine übliche Kritik was Codestil angeht, du solltest dir die Konvention etwas näher anschauen. Ich weiß, es ist noch kein großes Programm und glaub mir ich war Jahrelang noch viel schlimmer unterwegs, aber guter Code hat weniger Fehler (wirklicher Fakt) und man findet sie auch leichter. Rück ein wenig mehr ein, benutz self und beachte ein paar der anderen Regeln, denn je eher man damit anfängt desto besser ist es, aber das ist nur ein Tipp!

Was deinen Code angeht, so solltest du erstmal schauen, was für Rückgabewerte einzelne Funktionen haben. So gibt dir ein SaveDialog (auch ein OpenDialog) ein Boolean zurück. Ist diese Rückgabe wahr, wurde ok gedrückt, sonst abgebrochen.

Für dein ZipForge setzt du ein BaseDir (BasisVerzeichnis), du öffnest aber bestimmte Files. Also bleibt dein Zip einfach leer, weil dein Verzeichnis ungültig ist (eine Datei ist einfach kein Verzeichnis). Um jetzt das ganze Verzeichnis zu packen, indem sich deine Datei befindet solltest du also unbedingt einen anderen Dialog verwenden (so dass auch die Auswahl von Verzeichnissen und nur eben nur diesen möglich ist).
Allerdings hast du dann natürlich auch das Problem, dass du mit der aktuellen Filtermaske direkt ein ganzes Verzeichnis (alle Datein + Ordner) packst.

Möchtest du hingegen wirklich nur die ausgewählten Dateien packen, wirst du um AddFromStream nicht rumkommen (dazu schaust du dir am Besten mal die TFileStreams an (findest du auch viel Hilfe in der DP).
Dann solltest du aber in deinem OpenDialog auch noch Multiselect erlauben.

mOzZzI 25. Dez 2005 12:57

Re: Noch mal zu Zip Archiven
 
Dankeschön Der_Unwisssende!!
Daran hats gelegen jetzt funktionierts... :hello:
also danke nochmals

Edit: Habs mit FileCtrl SelectFolder gemacht...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz