![]() |
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? |
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 |
Re: Dateien in eine zusammenfassen
Vielleicht in Resourcen *.res-Dateien packen ?
|
Re: Dateien in eine zusammenfassen
Zitat:
Müsste ich das denn ungefähr so speichern: Zitat:
Zitat:
Und eigentlich dachte ich an einer "eigenen" Dateiendung ;) |
Re: Dateien in eine zusammenfassen
Zitat:
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:
|
Re: Dateien in eine zusammenfassen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab mal sowas Programmiert hier ist die Klasse mit DEMO
|
Re: Dateien in eine zusammenfassen
Zitat:
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. |
Re: Dateien in eine zusammenfassen
Nuja
Du brauchst wohl auch den Dateinamen, oder? dann würd ichs so machen:
Delphi-Quellcode:
Mit dem Filestream dann schreiben:
type
TFileHeader = record len: Int64; name: string; path: string;
Delphi-Quellcode:
so weisst du beim laden immer, wie lange deine daten sind.
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; Im übrigen würde ich auch zu einer vorhandenen Lösung greifen, ich meine,m was hast du gegen Komprimierung? |
Re: Dateien in eine zusammenfassen
Zitat:
Zitat:
- Eigene Dateiendung? Zitat:
Könntest du auch eine Beispiel-exe beilegen? |
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 10:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz