Entwickler-Ecke

Dateizugriff - Exe file speichern


Obitech - Mo 03.11.03 14:51
Titel: Exe file speichern
Servus,

Ausgangssituation: Habe ein Programm, mit dem ich Slideshows machen kann, will nun aber wenn ich auf 'save' gehe ein exe file generieren, damit ich die slideshow immer und ohne anderes Programm gestartet kann. Wie krieg ich das hin?
Merci.


Delete - Mo 03.11.03 15:18

Puh, jetzt wird es etwas komplizierter. Also du brauchst zwei Programme. Eisn welches deien Slideshow abspielt und ein zweites zum Erstellen selbiger.
Zweiteres tut nichts anderes als alle Bilder der Slideshow an das erste Programm zum Abspielen anzuhängen. Das erste Programm, an das die Bilder angehangen werden, kopiert beim Starten die angehängten Dateien auf die Festplatte und spielt sie ab. Vorraussetztung ist allerdings das das erste Programm seien Größe kennt, damit es weiß, wo die angehängten Dateien anfangen.

Ich arbeite geradse an einem SFXTool, welches Dateien zu einem SFXArchiv zusammenfaßt. Fertig ist schon alles - fast - es muss noch etwas Kosmetik betrieben werden.

Such hier mal nach "selbstentpackende Dateien" oder so in der Sparte für Dateien. Da solltest du erstmal fündig werden.


MrSaint - Mo 03.11.03 15:21

-> http://www.delphi-forum.de/viewtopic.php?t=17799



MrSaint


Obitech - Mo 03.11.03 18:24

Um noch etwas genauer zu sein:
Der Speichervorgang soll volgendermaßen ablaufen:
Name für Slideshow eingeben, 1.Program erzeugt exe-file und Unterverzeichnis in angegebenen Pfad und kopiert sämtliche Bilddateien in das Verzeichnis. Solbald ich dann in das Verzeichnis gehe kann ich das 2. Programm (Mit dem Namen der Slideshow) aufrufen und mir ankucken.

Kann ich das mit 2 Projektdateien in einer Projectgroup irgendwie realisieren?


Delete - Mo 03.11.03 18:48

wie du das in der IDE organisierst ist vollkommen unerheblich.


blackbirdXXX - Mo 03.11.03 19:46

Wenn es dir nichts ausmacht 2 Dateien zu haben dann mach eine Viewer.exe Datei die die Bilder.(beliebige Endun) (zip Archiv) öffnet. Die zip Datei kann man mit einigen Komponenten erstellen.

Der Viewer muss einfach die Zipdatei öffnen und die einzelnen Bilder extrahieren anzeigen und wieder löschen.


Obitech - Di 04.11.03 10:37

Denke ich werds doch so irgendwie machen.

Thanks!!!


Motzi - Di 04.11.03 16:14

Auch in diesem Fall könnte mein TExtraResManager eventuell gute Dienste leisten: http://www.x-spy.net/personal


mimi - Do 06.11.03 23:10

welches format sind sind die bilder ?
ansonste lade sie per TFileStream, vorteiel, du schreibst nur eine datei als team datei auf die palte und nicht 1000.

ich arbeite emebnfalls an sowas.
das prinzip:
1: datei öffnen lassen per FS
2: exe datei öffnen lassen per FS
3: an der exe datei das dranen hängen was in der ersten datei drinen steht
und fertig.


Tino - Fr 07.11.03 09:32

mimi hat folgendes geschrieben:
3: an der exe datei das dranen hängen was in der ersten datei drinen steht und fertig.

Und woher weißt du nachher an welcher Position sich die zusätzlichen Daten befinden? Irgendwie musst du diese doch auslesen.

Gruß
Tino


Motzi - Fr 07.11.03 10:15

Tino hat folgendes geschrieben:
mimi hat folgendes geschrieben:
3: an der exe datei das dranen hängen was in der ersten datei drinen steht und fertig.

Und woher weißt du nachher an welcher Position sich die zusätzlichen Daten befinden? Irgendwie musst du diese doch auslesen.

Gruß
Tino

Man kann einfach ganz simpel die Größe der angehängten Daten ganz ans Ende schreiben... :)


mimi - Fr 07.11.03 14:48

wenn ich mehrer dateien an einer hängen möchte, würde ich das so machen:
Einen Header erstellen, der sich am anfang der datei steht. und fertig.
was einfacheres gibt es einfach garnicht *G*


Tino - Mo 10.11.03 09:47

mimi hat folgendes geschrieben:
Einen Header erstellen, der sich am anfang der datei steht. und fertig.

Am Anfang der Exe-Datei? Meinst du man kann die Anwendung dann noch starten?

Gruß
Tino


mimi - Mo 10.11.03 18:13

das meinte ich, wenn ich mehre dateien habe packe ich sie zu eim archiv und füge das am ende der exe datei ein.
weil dann kann der anwender das ja noch ausführen, oder etwa nicht ???


maximus - Mo 10.11.03 18:23

Darf ich zitieren:

Zitat:
Einen Header erstellen, der sich am anfang der datei steht. und fertig.
was einfacheres gibt es einfach garnicht *G*


Du kannst doch jetzt nicht beigehen und das gegenteil behaupten, mal abgesehen, dass das eine vergewaltigung der deutschen sprache ist :mrgreen:


mimi - Mo 10.11.03 19:57

Zitat:
Einen Header erstellen, der sich am anfang der datei steht. und fertig.
was einfacheres gibt es einfach garnicht *G*



Du kannst doch jetzt nicht beigehen und das gegenteil behaupten, mal abgesehen, dass das eine vergewaltigung der deutschen sprache ist

was meinst du mit gegenteil.
zuerst erstelle ich ein archiv und dann füge ich das archiv der exe datei am ende hinzu, ich verstehe dich jetzt nicht so gans


Anonymous - Mo 10.11.03 20:57

mimi hat folgendes geschrieben:
Einen Header erstellen, der sich am anfang der datei steht. und fertig.



Tut mir Leid, aber jetzt muss ich schreien ;):

DU KANNST AM ANFANG EINER EXE-DATEI KEINEN HEADER HINZUFÜGEN!

Und deshalb braucht man die Größe der Exe-Datei, es sei denn die Größe der Daten steht am Ende der der Exe hinzugefügten Daten.


mimi - Mo 10.11.03 21:59

versteht mich falsch:
ich brauche die größe der exe datei deshalb, weil ich sonst nicht weiß wo mein archiv anfängt, OK?


Motzi - Mo 10.11.03 22:32

Nein, du brauchst nur die Größe der angehängten Daten ebenfalls hinten anhängen und kannst dann damit die Größe der Exe berechnen...! ;)


mimi - Di 11.11.03 18:22

Zitat:

... und kannst dann damit die Größe der Exe berechnen...!

ah, und wie ?


Anonymous - Di 11.11.03 18:26

So:

Dateigröße der Exe - letze 4 Bytes der exe

Aber so wie Mimi das gesagt hat, geht es eben nicht.


Motzi - Di 11.11.03 20:20

-> Gesamtgröße der Exe minus Größe der angehängten Daten... :roll:

Meine TExtraResManager-Komponente macht das ja auch nicht anders...!


mimi - Do 13.11.03 20:42

Zitat:

Gesamtgröße der Exe minus Größe der angehängten Daten

und wohrer weißt du wie groß das Archiv ist ???
weil da bin ich gerade.


Motzi - Fr 14.11.03 11:01

OK.. die ganze Vorgehensweise.. du nimmst öffnest die Datei an die du was anhängen willst, gehst ans Ende der Datei, schreibst die anzuhängenden Daten rein UND schreibst dann noch einen 4byte großen Integer mit der Größe der angehängten Daten rein. Die Datei schaut dann so aus:

Quelltext
1:
2:
3:
4:
5:
Exe-Datei (x bytes)
-----
Angehängte Daten (y bytes)
-----
Größe der angehängten Daten = y (4 Bytes)


Zum laden der Daten öffnest du einfach die Exe, gehst 4Bytes vor das Ende und liest einfach den 4Byte Integer in dem die Größe der Daten steht. Dann seekst du einfach an die Position -(Größe + 4) soFromEnd. Damit solltest du dann genau am Ende der Exe und damit am Anfang deiner Daten landen:

Quelltext
1:
2:
3:
4:
5:
Exe-Datei
-----   <- Hier
Angehängte Daten (x Bytes)             \
-----                                   | = x+ 4 Bytes
Größe der angehängten Daten (4 Bytes)  /


mimi - Fr 14.11.03 15:25

du hast recht Motzi, das ist der einfachste weg :D