Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mehrere Dateien in eine ZIP-Datei (https://www.delphipraxis.net/142135-mehrere-dateien-eine-zip-datei.html)

Tim-94 22. Okt 2009 14:22


Mehrere Dateien in eine ZIP-Datei
 
Hi Leute, mein Problem ist folgendes, ich möchte 4 Dateien in eine packen (gerne auch ZIP).
Ich habe schon viel gesucht aber nur Mist gefunden, der entweder garnicht oder nur teilweise funktioniert.
Deshalb mein neuer Post hier in der DP.

Vielen Dank im Vorraus ;)

Luckie 22. Okt 2009 14:25

Re: Mehrere Dateien in eine ZIP-Datei
 
Und wo ist jetzt das Problem? Wie stellst du dir vor, dass wir dir jetzt helfen sollen?

Welche Komponente benutzt du? Was hast du bisher probiert und was funktioniert da nicht?

Tim-94 22. Okt 2009 14:27

Re: Mehrere Dateien in eine ZIP-Datei
 
Ich möchte 4 dateien in 1 Datei packen, momentan verwende ich einen TMemoryStream der nicht ganz funktioniert.
Prozedur musss ich mal eben suchen...

Luckie 22. Okt 2009 14:32

Re: Mehrere Dateien in eine ZIP-Datei
 
Mal so schnell hingedacht:
FileStream erstellen
Länge der ersten Datei reinschreiben
Erste Datei reinschreiben
Länge zweite Datei reinschreiben
Zweite Datei reinschreiben
...

Tim-94 22. Okt 2009 14:34

Re: Mehrere Dateien in eine ZIP-Datei
 
So jetzt hab ich die Prozedur gefunden:

Delphi-Quellcode:
{-------------------------------------------------------------------}
procedure FileToStream(const FileName: String; Stream: TStream);
var
  a : Array[0..255] of Char;
  c : Cardinal;
  fs: TFileStream;
begin
  c := Length(ExtractFileName(FileName));
  StrPCopy(@a, ExtractFileName(FileName));
  Stream.Write(c, 4);
  Stream.Write(a, c);
  fs := TFileStream.Create(FileName, fmOpenRead);
  c := fs.Size;
  Stream.Write(c, 4);
  Stream.CopyFrom(fs, 0);
  fs.Free;
end;
{-------------------------------------------------------------------}
procedure StreamToFile(Stream: TStream);
var
  a : Array[0..255] of Char;
  c : Cardinal;
  fs: TFileStream;
begin
  FillChar(a, 255, 0);
  Stream.Read(c, 4);
  Stream.Read(a, c);
  Stream.Read(c, 4);
  fs := TFileStream.Create(a, fmCreate);
  fs.CopyFrom(Stream, c);
  fs.Free;
end;
{-------------------------------------------------------------------}


// Packen
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  FileToStream('.\Export-Artikel.txt', ms);
  FileToStream('.\Export-Verkauf.txt', ms);
  FileToStream('.\Export-Kunden.txt', ms);
  FileToStream('.\Einstellungen.ini', ms);
  ms.SaveToFile('.\DB.auddb');
  ms.Free;
end;

// Entpacken
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile('.\DB.auddb');
  StreamToFile(ms);
  StreamToFile(ms);
  StreamToFile(ms);
  StreamToFile(ms);
  ms.Free;
end;

Tim-94 22. Okt 2009 14:35

Re: Mehrere Dateien in eine ZIP-Datei
 
Ja das ist ja schön und gut, aber ich hab mit TFileStream und TMemoryStream leider keine Erfahrung :(

turboPASCAL 22. Okt 2009 14:40

Re: Mehrere Dateien in eine ZIP-Datei
 
Ja und nun sollen wir dir erklären was TMemoryStream macht und wie es funktioniert ?

Schau dir doch bitte mal ein paar Delphigrundlagen an.

Tim-94 22. Okt 2009 14:42

Re: Mehrere Dateien in eine ZIP-Datei
 
Nein ihr sollt vielleicht nur mal sagen, was da falsch ist, der Stream entpackt nämlich nur zwei Datein ordentlich und dann nicht mehr.

PS:Ich werde mir mal die Grundlagen zum TFileStream und TMemoryStream ansehen. Danke;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz