Autor Beitrag
cromos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


Delphi 7
BeitragVerfasst: 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



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


Delphi 7
BeitragVerfasst: Di 16.09.03 17:34 
Hi,

wie schreibe ich denn eine Datei in das Archiv??
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


Delphi 7
BeitragVerfasst: 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



BeitragVerfasst: 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.


ausblenden volle Höhe 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:

ausblenden Delphi-Quelltext
1:
  Join('C:\Datei.exe', 'C:\ReadMe.txt');					


Und das Trennen mit folgendem Aufruf(wenn Datei.exe die zusammengeschmolzene Datei ist):

ausblenden Delphi-Quelltext
1:
  Split('C:\Datei.exe', 'C:\TheHidden.txt');					



Von: Manuel Wiersch
chris_davidi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Windows 98 SE
Delphi 3
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


Delphi 7
BeitragVerfasst: 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



BeitragVerfasst: Mi 17.09.03 13:28 
@scrapt: Das ist eins zu eins aus dem EDH oder?
cromos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 17.09.03 13:40 
Gibt es da keine Readme Datei?

Gruß
Tino
cromos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


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


Delphi 7
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 296

Win XP, Red Hat Linux 7.3
Delphi 6 PE
BeitragVerfasst: Mi 17.09.03 17:03 
Ich bräuchte mal den Befehl fürs zippen mit ZLib!

_________________
mfG Superchatti
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


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


Delphi 7
BeitragVerfasst: 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:

ausblenden volle Höhe 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
      //Mach was
       
          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
          //Dem Archiv hinzufügen
          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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
res := FindFirst(ProgrammOrdner + 'Data\' + Form1.lblKontakt.caption + '\*.estt',faAnyFile,ds); 
          while(res =0) do begin 
          //Dem Archiv hinzufügen 
          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...."