Entwickler-Ecke
Dateizugriff - Zlib [done]
cromos - Di 16.09.03 15:08
Titel: Zlib [done]
Hallo.
ich möchte alle Dateien die sich in einem bestimmten Verzeichnis befinden zu einer zusammenfassen. (komprimieren) Und danach natürlich auch wieder dekomprimieren. Ich benötige ein Beispiel für die Unit Zlib wie ich den Ordner komprimiere und auch wieder dekompimiere.
Gruss
Cromos
Anonymous - Di 16.09.03 15:17
HiH :o
ZLib ist zum kompremieren von einer Datei :D Du kannst aber immer eine in das Archiv hinzufügen ;)
Schreib doch einfach eine Schleife die die Dateien alle in dein Archiv hinzufügt :D
:wave:, sCrAPt
cromos - Di 16.09.03 17:34
Hi,
wie schreibe ich denn eine Datei in das Archiv??
cromos - Mi 17.09.03 01:04
Hallo.
| Zitat: |
dabei bin ich gerade, wenn du willst kannst du ja mitmachen:
|
Also das ist es nicht was ich suche. Ich will auch keinen Packer oder ähnliches Programmieren. Ich brauche die Funktion nur für ein Tools was eigendlich nichts mit Komprimieren oder packen zu tun hat.
Ich habe eine Verzeichnisstruktur, die möchte ich in eine Datei schreiben, später natürlich wieder extrahieren. Ob es dann komprimiert ist, ist eigendlich egal. Wäre aber ein schöner nebenefekt.
Also geht das, und wenn ja bitte wie? Ich weiss. Zlib, Streams usw. Ich brauche aber konkrete Beispiele. Von mir aus kann es auch eine Freeware Kompo sein.
Gruss
Cromos
Anonymous - Mi 17.09.03 12:58
Den Code ohne Kompremierung hab ich:
Dateien miteinander verschmelzen
Wer einen Installer unter Delphi schreiben möchte, wird vielleicht eine Methode vermissen, mit denen man Files verschmelzen und wieder trennen kann. Dies kann man mit beiden Prozeduren erreichen.
Join dient zum verschmelzen der beiden Dateien und Split trennt beide wieder.
Nach dem verschmelzen ist die Hauptfile immer noch voll ausführbar (wenn sie keinen CRC Check oder so was besitzt) und die 2. Datei in der Hauptdatei drin.
Beim Aufruf von Split wird die 2. Datei aus der 1. angelegt und die 1. Datei verkürzt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| procedure Join (Main_FileName, Hidden_Filename : string); var MainFile : TFileStream; HiddenFile : TFileStream; SizeOfFile : Cardinal; SearchWord : string[10]; begin MainFile := TFileStream.Create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite); try SizeOfFile := MainFile.Size; HiddenFile := TFileStream.Create(Hidden_Filename, fmOpenRead or fmShareDenyNone); try MainFile.Seek(0, soFromEnd); MainFile.CopyFrom(HiddenFile, 0); MainFile.Seek(0, soFromEnd); finally HiddenFile.Free; end; SearchWord := IntToStr(SizeOfFile) + #0; MainFile.Seek(0, soFromEnd); MainFile.WriteBuffer(SearchWord, SizeOf(SearchWord)); finally MainFile.Free; end; end;
procedure Split(Main_FileName, NewFromMain_Filename : string); var MainFile : TFileStream; SplitFile : TFileStream; HelpStr : string[10]; GetSize : integer; begin MainFile := TFileStream.create(Main_FileName, fmOpenReadWrite or fmShareDenyWrite); try SplitFile := TFileStream.Create(NewFromMain_Filename, fmCreate or fmShareDenyNone); try MainFile.Position := MainFile.Size - 11; MainFile.Read(HelpStr, 10); GetSize := StrToInt(HelpStr); MainFile.Position := GetSize; SplitFile.CopyFrom(MainFile, MainFile.Size-GetSize); SplitFile.Size := SplitFile.Size - 11; MainFile.Size := GetSize; finally SplitFile.Free; end; finally MainFile.Free; end; end; |
Das Verschmelzen der Dateien erfolgt so:
Delphi-Quelltext
1:
| Join('C:\Datei.exe', 'C:\ReadMe.txt'); |
Und das Trennen mit folgendem Aufruf(wenn Datei.exe die zusammengeschmolzene Datei ist):
Delphi-Quelltext
1:
| Split('C:\Datei.exe', 'C:\TheHidden.txt'); |
Von: Manuel Wiersch
chris_davidi - Mi 17.09.03 13:01
Hm, und wie wäre es mit der ZipMaster- Komponente, dass Archiv-Format wäre dann ZIP und man kann eben packen und entpacken lassen mit ein paar Zeilen Quellcode...
cromos - Mi 17.09.03 13:25
| Zitat: |
Hm, und wie wäre es mit der ZipMaster- Komponente, dass Archiv-Format wäre dann ZIP und man kann eben packen und entpacken lassen mit ein paar Zeilen Quellcode...
|
Wo bekomme ich die her. Ist es Freeware?
@sCrAPt:
Hm. Ich weiss nicht ob es das ist was ich will. ich muss eine Verzeichnis strucktur inkl. aller Dateien und der Unterordner "Zusammenführen".
Mit Deinem Code kann ich ja nur 2 Dateien miteinader "Verschmelzen".
Und selbt wenn es mit mehreren gehen würde. Die Verzeichnisstruktur kann ich ja so nicht mitnehmen.
Ich glaube eine Zip-Komp wäre wohl eher das was ich brauche. Am besten Freeware.
Gruss
Cromos
Delete - Mi 17.09.03 13:28
@scrapt: Das ist eins zu eins aus dem EDH oder?
cromos - Mi 17.09.03 13:38
Hallo,
OK. Ich habe mir jetzt mal die ZipMaster Kompo runtergeladen.
Nur ist es so das ich noch nie eine fremde Komponennte unter Delphi genutzt habe. Deshlab weiss ich auch nicht wie ich die in Delphi einbinde.
Bzw. welche von den vielen Dateien ich in Delphi einbinden muss.
Und wo ????
Tino - Mi 17.09.03 13:40
Gibt es da keine Readme Datei?
Gruß
Tino
cromos - Mi 17.09.03 15:47
Ja. Da ist tatsächlich eine. Nur leider gibt es die Dateien die da drin stehen nicht alle.
:?:
Was ich nicht verstehe: Warum muss das immer so kompliziert sein?
Andere Leute können sotwas auch mit einem Setup ausliefern :evil:
Jedenfalls für mich als Delphi-Anfänger schwer verständlich.
Ich verstehe es wirklich nicht. Warum kann ein Programmierer der es schafft eine warscheinlich richtig gute Kompo zu erstellen es nicht schaffen ein Setup dafür zu generieren :?:
Jednfalls weiss ich nicht wie ich die Installieren soll.
cromos - Mi 17.09.03 16:19
So, hab jetzt mal versucht das ganze über die Delphi IDE zu installieren.
Habe da auch eine Art Anleitung im Internet gefunden.
Nur leider klappt das auch nicht.
Fehler:
Quelltext
1:
| [Fataler Fehler] ZipMstr.pas(29): Datei nicht gefunden: 'ZipSFX.dcu' |
Die Datei existiert auch nicht auf meinem Computer.
Keine Ahnung. Finde das ganze sehr verwirrend. :roll:
superchatti - Mi 17.09.03 17:03
Ich bräuchte mal den Befehl fürs zippen mit ZLib!
mimi - Mi 17.09.03 17:15
@cromos
suche mal nach der datei und und speichere den pfad in der delphi IDE unter tools\umgebens...\verzeichnise\lib verzeichnis
cromos - Mi 17.09.03 17:28
| Zitat: |
suche mal nach der datei und und speichere den pfad in der delphi IDE unter tools\umgebens...\verzeichnise\lib verzeichnis
|
Die Datei existiert auf meinem Rechner nicht.
mimi - Mi 17.09.03 17:40
muss aber, wenn nicht hast du nicht die besagte komponente.
such mal auf dem gesammte fesplate noch ZipSFX.dcu dann solltes du sie finden
cromos - Mi 17.09.03 20:54
Also bei mir exestier keine Datei mit diesem Namen. Auch nicht mit einem
ähnlichen.
Das ist die richtige Kompo.
ZipMaster von dieser Seite:
http://www.geocities.com/rjpeters_au/zipmaster.html
Habe mir das Full-Archiv runtergeladen.
Es kann nur sein das das Archiv fehlerhaft ist.
cromos - Mi 17.09.03 21:37
Ok. Nach langem hin un her, habe ich es glaube ich geschaft.
Ich musste eine Datei umbenennen. Und etwas umkopieren etc.
(Ich verstehe trotzdem nicht wie das kompliziert gemacht ist)
Na ja. Jetzt haben ich einen Reiter in der Delphi IDE mit der Zip un Unzip Kompo.
Ich wollte eine Zip Datei erstellen. Leider geht es nicht.
hier der Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure TForm15.btnSavePaketClick(Sender: TObject); var ProgrammOrdner : String; var res: Integer;
ds: TSearchRec;
begin ProgrammOrdner:=ExtractFilePath(application.ExeName); with SaveDialog1 do begin FileName:= Form1.lblKontakt.Caption + '.tdt'; Title:='Datenaustauschdatei Speichern unter:'; Filter:='EST Terminator Datentauschdatei (TDT)|*.TDT'; defaultExt:='TDT'; InitialDir:=ExtractFilePath(ParamStr(0)); if Execute then begin Zipmaster1.DLLDirectory:=ExtractFilePath(ParamStr(0)); Zipmaster1.ZipFilename:=ExtractFilePath(ParamStr(0))+ 'Test.zip';
res := FindFirst(ProgrammOrdner + 'Data\' + Form1.lblKontakt.caption + '\*.estt',faAnyFile,ds); while(res =0) do begin Zipmaster1.FSpecArgs.Add(ds.name); res := FindNext(ds); end; FindClose(ds);
Zipmaster1.Add;
end else exit; end;
end; |
Anstatt 'Test.Zip' sollte natürlich SaveDialog1.FileName da stehen. Sollte nur zum Testten sein.
Wenn ich es so mach passier gar nichts.
Wenn ich SaveDialog1.FileName hinschreibe, dann bricht das Programm mit einem Fehler ab. (Exception - ZipMaster 10308)
Kann mir da jemand helfen?
Gruss
Cromos
mimi - Mi 17.09.03 22:23
1. das else hinte dem ersten if ist sinlos das kannst du löschen.
2. was soll passieren ? soll eine neue zip datei erstellt werden(sieht
danach aus)
weiß garnicht mehr wie das war, aber da ist ein beipsiel progamm dabei.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| res := FindFirst(ProgrammOrdner + 'Data\' + Form1.lblKontakt.caption + '\*.estt',faAnyFile,ds); while(res =0) do begin Zipmaster1.FSpecArgs.Add(ds.name); res := FindNext(ds); end; FindClose(ds); |
das kannst du dir auch sparen und einfach hinschreiben:
Zipmaster1.FSpecArgs.add(ProgrammOrdner + 'Data\' + Form1.lblKontakt.caption + '\*.estt');
sollte funktionieren.
ansonsten rate ich dir das beispiel progamm anzuschauen.
cromos - Do 18.09.03 01:05
Hallo,
OK. Das Packen der Daten funktioniert jetzt.
Nur beim Entpacken habe ich Probleme.
Ich bekomme vom Programm die Fehlermeldung:
| Zitat: |
ZipMsgXX.res is probably not linked to the executable. Missing String ID is
11001
|
Muss ich die besagte Datei ins Programmverzeichnis kopieren?
Geht aber auch nicht.
:?:
cromos - Do 18.09.03 10:41
Ok. Hab es geschafft.
Sorry wegen der blöden Frage gestern. Klar musste ich die Resource mitkompilieren. (Kleines Blackout´- Zu lange am Rechner :D )
superchatti - Do 18.09.03 18:05
ICH BRAUCHE HILFE!
Ich kann mir da nichts runterladen, denn mein IE kaggt nur auf der Seite ab!
mimi??
Kannst du mir das ZIP schicken??
BITTE!
:wink:
:oops:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!