Autor |
Beitrag |
LokutusvB
      
Beiträge: 74
WinXP
Delphi 5, Delphi XE
|
Verfasst: Mi 22.09.10 10:08
Hallo,
wenn man hier im Forum nach Zlib sucht, findet man fast nur Beiträge mit Antworten wie "Forumsuche" benutzen. Allerdings konnte ich in keinem der Beiteäge eine Lösung finden, wie ich mehrere Dateien mit Zlib in ein Archiv packen kann.
Im Netz konnte ich folgendes finden:
www.swissdelphicente...showcode.php?id=1617
Allerdings kann ich in Files angeben, was immer ich möchte, er packt mir immer den ganzen Ordner in die zip-Datei.
Quelltext 1: 2: 3: 4:
| tmp := TStringList.Create; tmp.Add('D:\Delphi\Test\text1.cfg'); tmp.Add('D:\Delphi\Test\text2.cfg'); CompressFiles(tmp, 'test.zip'); | .
Trotzdem packt er mir den vollständigen Test-Ordner in die test.zip-Datei. Liegt der Fehlmer bei mir oder bei der Compress-Files-Prozedur?
|
|
LokutusvB 
      
Beiträge: 74
WinXP
Delphi 5, Delphi XE
|
Verfasst: Do 23.09.10 11:15
Ich bin ein Stück weiter gekommen. Die beiden verlinkten Proceduren funktionieren soweit. Ich kann Dateien in ein Archiv "Packen" und wieder "Entpacken". Allerdings sind diese Archive nicht 7Zip-kompatibel. Die Windows-Datei-Anzeige wirft direkt die Fehlermeldung, die zip-Komprimierte Datei ist beschädigt. Was ist zu tun, das diese erstellte Archiv-Datei über CompressFiles(...) auch mit z.B. 7Zip oder der Windows-Anzeige geöffnet werden kann? Was müßte ich zusätzlich abändern, um damit auch Zip-Archive auslesen zu können? Oder ist das damit grundsätzlich nicht möglich?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 23.09.10 11:39
Da wird wohl der passende Dateiheader fehlen.
|
|
LokutusvB 
      
Beiträge: 74
WinXP
Delphi 5, Delphi XE
|
Verfasst: Do 23.09.10 11:42
Dateiheader? Oh, ich sehe schon, da ist noch Forschung angesagt. Jedenfalls Danke für den Tip.
Ich konnte folgenden Beitrag finden:
www.delphi-forum.de/...ighlight=dateiheader
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TFileHeader = packed record // Datei-Header UnzipVersion :Word; Flags :Word; CompressType :Word; Date :Word; Time :Word; CRC32 :LongInt; CompSize :LongInt; UnCompSize :LongInt; FileNameLen :Word; ExtraLen :Word; end; |
scheint genau das zu sein, was ich setzen muß. Mir ist allerdings unklar, wie ich all die Informationen zusammensuchen soll und wie ich diese in die Datei bekomme.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 23.09.10 13:18
Einfach mit einem Stream vor weg in die Dateischreiben. Aber du musst auch den richtigen Zip-Header setzte. Und ich weiß nicht, ob er das ist, was du da gefunden hast.
|
|
LokutusvB 
      
Beiträge: 74
WinXP
Delphi 5, Delphi XE
|
Verfasst: Do 23.09.10 15:24
Geht das auch noch nachträglich? der Header sollte der richtige sein. Zumindest geht es in der verlinkten Diskussion um das Auslesen von Zip-Dateien. Allerdings, wenn möglich, würde ich den Header gern nach dem Compress schreiben. Geht das? oder muß das zwangsweise als erster Schritt erfolgen?
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 23.09.10 16:10
Dir bleibt garnichts anderes übrig als den Header hinterher zu erstellen da dir ja am Anfang Informationen fehlen.
Aber um danach nicht die Datei nochmal umkopieren zu müssen würde ich erstmal einen "leeren" Header an den Anfang der Datei schreiben. Und dann, wenn du alles beisammen hast, die Werte an den richtigen Stellen ändern. Aber dafür solltest du schon eine Variante von CompressFiles verwenden die in einen Stream schreibt.
Es sei denn es gibt beim schreiben in eine Datei die Möglichkeit an eine bestehende Datei hinten was anzuhängen. Hängt halt von den Einstellungen in zlib ab. Ich kenne das nicht wirklich. Aber bei der Suche nach Informationen zum ZIP Format kannst du auch mal die 7-Zip SDK Sachen durchschauen, ich dächte da schon was zu gelesen zu haben.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
LokutusvB 
      
Beiträge: 74
WinXP
Delphi 5, Delphi XE
|
Verfasst: Di 28.09.10 10:40
Wieso gibt es hier im Forum und im Netz so wenig Informationen? Oder suche ich nur mit den falschen Stichpunkten (Header)?
Da wird es sicher einfacher sein, nach einer fertigen Komponente für Delphi 5 zu suchen, mit deren Hilfe man Zip-Dateien packen und entpacken kann.
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 28.09.10 11:41
Manchmal ist einfach ein bisschen der Wurm drin und man kommt nicht drauf, aber dafür gibt es ja uns
Schau mal hier www.wotsit.org/list.asp?al=Z gibt es sogar verschiedene Spezifikationen.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|