Zipper
Zipper
Hallo,
ich möchte mir ein kleines Programm schreiben, mit dem ich den Inhalt eines Ordners und möglicherweise darin enthaltenene Unterordner in eine ZIP-Datei packen kann. Bei meiner Lazarus-Version wurde eine Unit Zipper mitgeliefert. Aber ich finde nirgends Beispielcode dafür. auch in den bei Lazarus mitgelieferten Beispielen habe ich nichts zum Zipper gefunden. Kennt jemand vielleicht Beispielcode diese Komonente?
ich möchte mir ein kleines Programm schreiben, mit dem ich den Inhalt eines Ordners und möglicherweise darin enthaltenene Unterordner in eine ZIP-Datei packen kann. Bei meiner Lazarus-Version wurde eine Unit Zipper mitgeliefert. Aber ich finde nirgends Beispielcode dafür. auch in den bei Lazarus mitgelieferten Beispielen habe ich nichts zum Zipper gefunden. Kennt jemand vielleicht Beispielcode diese Komonente?
-
- Beiträge: 475
- Registriert: Do 15. Nov 2007, 16:58
- OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
- CPU-Target: i386, x64
- Wohnort: Gera
Re: Zipper
Hi,
ich hatte mir mal zum testen eine Unit gebastelt, die sollte als Beispielcode taugen.
ich hatte mir mal zum testen eine Unit gebastelt, die sollte als Beispielcode taugen.
- Dateianhänge
-
- archelper.pas
- (3.81 KiB) 102-mal heruntergeladen
mfg Ingo
Re: Zipper
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Zipper
ich habe es jetzt mal so probiert:
Es erscheint zwar keine Fehlermeldung, aber die Datei "Testzip.zip' kann ich auch nirgends finden. Muss die Datei zuerst angelegt werden? Oder was mache ich falsch?
Code: Alles auswählen
procedure TFormHaupt.Button1Click(Sender: TObject);
var
MeinZipper : TZipper; // benötigt Uses Zipper
begin
MeinZipper := TZipper.Create;
MeinZipper.Entries.AddFileEntry('C:\Users\User\Documents\Lazarus\Projekte\Zip\ziptest.lpi', 'Testzip.zip');
end;
Re: Zipper
Parameter von AddFileEntry:
ADiskFileName (die zu packende Datei mit Pfad)
AArchiveFileName (der Dateiname mit Pfad in dem Archiv)
Nun musst du noch das Zip erstellen (so oder wie im Wiki beschrieben):Das Ganze noch in einen Try-Except-Block und schon sollte es passen.
ADiskFileName (die zu packende Datei mit Pfad)
AArchiveFileName (der Dateiname mit Pfad in dem Archiv)
Nun musst du noch das Zip erstellen (so oder wie im Wiki beschrieben):
Code: Alles auswählen
begin
MeinZipper := TZipper.Create;
MeinZipper.Entries.AddFileEntry('C:\Users\User\Documents\Lazarus\Projekte\Zip\ziptest.lpi'{, 'Testzip.zip'});
if MeinZipper.Entries.Count > 0 then
MeinZipper.SaveToFile('Testzip.zip');
MeinZipper.Free;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Zipper
Das könnte Problematisch werden, da dann im Zip Archiv intern ein Pfad mit C:\ losgehen würde, und dir die meisten Zip Programme das dann nicht mehr finden können. Ich würde es so machen:Michl hat geschrieben:Parameter von AddFileEntry:
ADiskFileName (die zu packende Datei mit Pfad)
AArchiveFileName (der Dateiname mit Pfad in dem Archiv)
Nun musst du noch das Zip erstellen (so oder wie im Wiki beschrieben):Das Ganze noch in einen Try-Except-Block und schon sollte es passen.Code: Alles auswählen
begin MeinZipper := TZipper.Create; MeinZipper.Entries.AddFileEntry('C:\Users\User\Documents\Lazarus\Projekte\Zip\ziptest.lpi'{, 'Testzip.zip'}); if MeinZipper.Entries.Count > 0 then MeinZipper.SaveToFile('Testzip.zip'); MeinZipper.Free; end;
Code: Alles auswählen
begin
MeinZipper := TZipper.Create;
MeinZipper.Entries.AddFileEntry(path, CreateRelativePath(path, ExtractFileDir(path))); // benötigt uses LazFileUtils
if MeinZipper.Entries.Count > 0 then
MeinZipper.SaveToFile('Testzip.zip');
MeinZipper.Free;
end;
Re: Zipper
Recht hast du. War mir noch gar nicht aufgefallen. Ich nutze hauptsächlich den TotalCommander, der kann so ein Zip öffen, der Windows Explorer nicht.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Zipper
ich mach das jetzt so, wie Warf das vorgeschlagen hat, und es funktioniert einwandfrei. Vielen Dank @Warf. Aber ein kleines Problem habe ich noch: Die Dateien, die gepackt werden sollen, trage ich über einen OpenDialog in eine Listbox ein. Der Zipper holt sich die Dateien also aus der Listbox. Aber irgendwie schaffe ich es nicht, auch Verzeichnisse in die Listbox einzutragen. Ich habe mir schon sämtliche Optionen beim OpenDialog angeschaut, finde aber keine entsprechende Einstellung. Stell ich mich da nur zu dämlich an? Das muss doch irgendwie auch gehen. Oder?