| Autor |
Beitrag |
cromos
      
Beiträge: 219
Delphi 7
|
Verfasst: Di 16.09.03 15:08
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
Zuletzt bearbeitet von cromos am Do 18.09.03 10:41, insgesamt 1-mal bearbeitet
|
|
sCrAPt
Gast
Erhaltene Danke: 1
|
Verfasst: Di 16.09.03 15:17
HiH
ZLib ist zum kompremieren von einer Datei  Du kannst aber immer eine in das Archiv hinzufügen
Schreib doch einfach eine Schleife die die Dateien alle in dein Archiv hinzufügt
 , sCrAPt
|
|
cromos 
      
Beiträge: 219
Delphi 7
|
Verfasst: Di 16.09.03 17:34
Hi,
wie schreibe ich denn eine Datei in das Archiv??
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 16.09.03 17:40
dabei bin ich gerade, wenn du willst kannst du ja mitmachen:
www.delphi-forum.de/...ic.php?p=95672#95672
und wenn nicht, einfach mal nach TStream suchen bzw. informieren *G*
das ist garnicht mal so einfach.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
cromos 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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
|
|
sCrAPt
Gast
Erhaltene Danke: 1
|
Verfasst: 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.
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
      
Beiträge: 76
Windows 98 SE
Delphi 3
|
Verfasst: 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 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 17.09.03 13:28
@scrapt: Das ist eins zu eins aus dem EDH oder?
|
|
cromos 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 17.09.03 13:40
Gibt es da keine Readme Datei?
Gruß
Tino
|
|
cromos 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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
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 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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. 
|
|
superchatti
      
Beiträge: 296
Win XP, Red Hat Linux 7.3
Delphi 6 PE
|
Verfasst: Mi 17.09.03 17:03
Ich bräuchte mal den Befehl fürs zippen mit ZLib!
_________________ mfG Superchatti
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
cromos 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
cromos 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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:
www.geocities.com/rj...rs_au/zipmaster.html
Habe mir das Full-Archiv runtergeladen.
Es kann nur sein das das Archiv fehlerhaft ist.
|
|
cromos 
      
Beiträge: 219
Delphi 7
|
Verfasst: 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:
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
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: 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.
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|