Delphi-PRAXiS

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.

franktron 6. Jul 2006 15:39

Re: Dateien in eine zusammenfassen
 
Zitat:

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

Könntest du auch eine Beispiel-exe beilegen?

Das kannst doch selber sagen wie die File heissen soll.

Sry hab die DPR vergessen

xZise 6. Jul 2006 15:44

Re: Dateien in eine zusammenfassen
 
Zitat:

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

Nix, die Dateien sind aber eh nicht sehr groß, also ist sie nicht umbedingt notwendig.

Bisher gefällt mir der FileClass am besten, und funktioniert bisher auch sehr gut.

Bernhard Geyer 6. Jul 2006 15:54

Re: Dateien in eine zusammenfassen
 
Zitat:

Zitat von xZise
Zitat:

Zitat von Bernhard Geyer
Nicht so ähnlich sondern mach es genau so. Nimm dir 'ne ZIP-Komponente und das ZIP-Format.

- Ist diese Komponente kostenlos?

Selbst verwende ich eine kostenpflichtige. Aber wenn Du die Forensuche bemühst müsstest Du auch kostenlose Komponenten finden (z.B. Abbreviate auf Sourceforge).
Zitat:

Zitat von xZise
- Eigene Dateiendung?

Wenn Du Lustig bist und es für spielfreudigen Anwendern nicht so offensichtlich zu einer Neuen "Mal schauen was passiert wenn man ..." Spielwiese einladen willst - Ja.

franktron 6. Jul 2006 16:32

Re: Dateien in eine zusammenfassen
 
So habs nochmal hochgeladen jetzt mit DPR

P.S. die verschlüsslung ist noch nicht eingebaut

xZise 6. Jul 2006 16:39

Re: Dateien in eine zusammenfassen
 
Zitat:

Zitat von franktron
P.S. die verschlüsslung ist noch nicht eingebaut

Musst dich auch nicht beeilen, da es wunderbar ohne läuft, und es eigentlich für jeden zugänglich sein sollte.

@ Bernhard:
Der sinn meines Programms ist einfach:
Es gibt ein Spiel (TrackMania), welches einen komplizierten Pfad (bei mir: C:\Programme\TrackMania ESCW) hat, und man sich Strecken (~\Tracks\Challanges\) downloaden kann (auch anderes zeugs ^^) und mir es zu dumm ist ständig diesen Ordner "aufzusuchen". Also habe ich mir gedacht programmiere ich ein Programm, welches über die WinRegistry den Installationsort heruasfindet und dementsprechend brauch man nur den Dateitypen (*.TMIP) anzuklicken. Es erscheint ein Fenster mit den Dateien etc. und man kann dann die Dateien exportieren. Ich denke mal, dass das Programm, wenn es fertig ist eine ordentliche Zeitersparnis sein wird.

@ all: Diese Frage ist:

== beantwortet ==

xZise 6. Jul 2006 18:53

Re: Dateien in eine zusammenfassen
 
franktron:
Werden die Dateinamen immer klein geschrieben?

franktron 6. Jul 2006 18:53

Re: Dateien in eine zusammenfassen
 
Ne ich schreib nur immer alles klein ist wegen MySQL und Linux und so

xZise 6. Jul 2006 18:56

Re: Dateien in eine zusammenfassen
 
1. WOW das war schnell
2. Ich meine dass, weil, wenn ich den Namen aus dem Header hole nur kleinbuchstaben bekomme!

omata 6. Jul 2006 19:03

Re: Dateien in eine zusammenfassen
 
Auch wenn es schon beantwortet ist. Hier noch mal ein Link zu einer freien Zip-Komponente

Gruss
Thorsten

franktron 6. Jul 2006 19:39

Re: Dateien in eine zusammenfassen
 
Zitat:

Zitat von xZise
1. WOW das war schnell
2. Ich meine dass, weil, wenn ich den Namen aus dem Header hole nur kleinbuchstaben bekomme!

Das hab ich geamcht wegen Dpl. Datein


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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