Autor Beitrag
LokutusvB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74

WinXP
Delphi 5, Delphi XE
BeitragVerfasst: 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.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74

WinXP
Delphi 5, Delphi XE
BeitragVerfasst: 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



BeitragVerfasst: Do 23.09.10 11:39 
Da wird wohl der passende Dateiheader fehlen.
LokutusvB Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74

WinXP
Delphi 5, Delphi XE
BeitragVerfasst: 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

ausblenden 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74

WinXP
Delphi 5, Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 74

WinXP
Delphi 5, Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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 8)
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?