Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateien in eine zusammenfassen (https://www.delphipraxis.net/72772-dateien-eine-zusammenfassen.html)

xZise 6. Jul 2006 15:04


Dateien in eine zusammenfassen
 
Gibt es in Delphi eine möglichkeit Dateien zu einer neuen zusammenfassen?

Also so ähnlich wie Zip, rar etc.!

Nur "brauche" ich keine Komprimierung, sondern lediglich eine Zusammenfassung. Damit man z.B. nur eine Datei downloaden muss, und die dann von MEINEM Programm wieder auseinadergefrickelt wird?

Tyrael Y. 6. Jul 2006 15:08

Re: Dateien in eine zusammenfassen
 
Ich habe es nicht getestet, aber sollte an sich mit TFileStream gehen.

Immer die Position merken an der er mit der neuen Datei beginnt zu lesen.
Mit SaveToFile Speichern.
Und beim "entpacken" wieder immer bis zu den gemerkten Positionen lesen und in eine neue Datei speichern.

Sollte gehen

Martin K 6. Jul 2006 15:08

Re: Dateien in eine zusammenfassen
 
Vielleicht in Resourcen *.res-Dateien packen ?

xZise 6. Jul 2006 15:12

Re: Dateien in eine zusammenfassen
 
Zitat:

Zitat von Tyrael Y.
Ich habe es nicht getestet, aber sollte an sich mit TFileStream gehen.

Immer die Position merken an der er mit der neuen Datei beginnt zu lesen.
Mit SaveToFile Speichern.
Und beim "entpacken" wieder immer bis zu den gemerkten Positionen lesen und in eine neue Datei speichern.

Sollte gehen

Mit Streams habe ich noch nicht gearbeitet...

Müsste ich das denn ungefähr so speichern:
Zitat:

<Dateipositionen>
<Datei1>
<Datei2>
...
?


Zitat:

Zitat von Martin K
Vielleicht in Resourcen *.res-Dateien packen ?

Wie geht das?


Und eigentlich dachte ich an einer "eigenen" Dateiendung ;)

Martin K 6. Jul 2006 15:16

Re: Dateien in eine zusammenfassen
 
Zitat:

Zitat von xZise
Zitat:

Zitat von Martin K
Vielleicht in Resourcen *.res-Dateien packen ?

Wie geht das?

Och, da wirst Du bestimmt in der Suche viel finden.
Bei *.res ist es auch praktisch, wenn Du ein selbstentpackendes Archiv machen willst.
Also einfach die res in eine EXE einbinden, und wenn die EXE gestartet wird, können die Dateien entpackt werden.

Zitat:

Zitat von xZise
Und eigentlich dachte ich an einer "eigenen" Dateiendung ;)

Dann musst Du es doch per FS machen...

franktron 6. Jul 2006 15:19

Re: Dateien in eine zusammenfassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal sowas Programmiert hier ist die Klasse mit DEMO

Bernhard Geyer 6. Jul 2006 15:22

Re: Dateien in eine zusammenfassen
 
Zitat:

Zitat von xZise
Gibt es in Delphi eine möglichkeit Dateien zu einer neuen zusammenfassen?

Also so ähnlich wie Zip, rar etc.!

Nicht so ähnlich sondern mach es genau so. Nimm dir 'ne ZIP-Komponente und das ZIP-Format.
Damit brauchst Du das Rad nicht nochmal neu zu erfinden und hast neben (der nicht nötigen Komprimierung) gleich auch eine CRC-Checksumme für das Archiv eingebaut.

DGL-luke 6. Jul 2006 15:23

Re: Dateien in eine zusammenfassen
 
Nuja

Du brauchst wohl auch den Dateinamen, oder?

dann würd ichs so machen:

Delphi-Quellcode:
type
  TFileHeader = record
    len: Int64;
    name: string;
    path: string;
Mit dem Filestream dann schreiben:

Delphi-Quellcode:
var files: array of TFileHeader;
    fs: TFIleStream;
    ms: TMemoryStream;
    i: Integer;
    slen: Int64;
begin
  ms := TMemoryStream.Create;
  fs := TFileStream.Create('archive.xzs',fmOpenCreate);
  for i := 0 to high(files) do
    begin
      slen := length(files[i].name);
      fs.write(slen);                          //länge des dateinamens schreibeb
      fs.Write(@files[i].name[1],slen);        //dateinamen schreiben
      fs.Write(len);                           //länge der datei schreiben
      ms.size := 0;
      ms.LoadFromFile(files[i].path);          //datei laden
      ms.Position := 0;
      fs.CopyFromStream(ms,ms.size);          //datei schreiben
    end;
end;
so weisst du beim laden immer, wie lange deine daten sind.

Im übrigen würde ich auch zu einer vorhandenen Lösung greifen, ich meine,m was hast du gegen Komprimierung?

xZise 6. Jul 2006 15:25

Re: Dateien in eine zusammenfassen
 
Zitat:

Zitat von Martin K
Och, da wirst Du bestimmt in der Suche viel finden.
Bei *.res ist es auch praktisch, wenn Du ein selbstentpackendes Archiv machen willst.
Also einfach die res in eine EXE einbinden, und wenn die EXE gestartet wird, können die Dateien entpackt werden.
[...]
Dann musst Du es doch per FS machen...

Okay ;)
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von xZise
Gibt es in Delphi eine möglichkeit Dateien zu einer neuen zusammenfassen?

Also so ähnlich wie Zip, rar etc.!

Nicht so ähnlich sondern mach es genau so. Nimm dir 'ne ZIP-Komponente und das ZIP-Format.
Damit brauchst Du das Rad nicht nochmal neu zu erfinden und hast neben (der nicht nötigen Komprimierung) gleich auch eine CRC-Checksumme für das Archiv eingebaut.

- Ist diese Komponente kostenlos?
- Eigene Dateiendung?

Zitat:

Zitat von franktron
Ich hab mal sowas Programmiert hier ist die Klasse mit DEMO

o.O Sieht gut aus, aber MUSS es eine ".dat" sein?

Könntest du auch eine Beispiel-exe beilegen?

Tyrael Y. 6. Jul 2006 15:25

Re: Dateien in eine zusammenfassen
 
Ups sry meinte TMemoryStream.

Dabei ist zu beachten, daß die Dateien dann solange das Objekt von TMemoryStream da ist im Speicher liegen. Daher nicht ratsam mit sehr großen Dateien, wenn du nicht soviel RAM hast. Für kleinere Dateien sollte es machbar sein.

Speichern:
- alle Dateien, die du "speichern" möchtest in einer Schleife durchgehen
- die Eigenschaft "Position" merken
- LoadFromFile für die erste Datei aufrufen
- nächster Schliefendurchlauf
- die Eigenschaft "Position" merken
- LoadFromFile für die zweite Datei aufrufen
...
am Ende mit SaveToFile in eine neue Datei speichern

Lesen:
- mit LoadFromFile deine Datei laden
- mit Read bis zur gemerkten Position lesen
- das ganzte in eine Datei speichern
usw.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.
Seite 1 von 2  1 2      

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