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 EXE speichern (https://www.delphipraxis.net/135044-dateien-exe-speichern.html)

DArc 3. Jun 2009 17:57


Dateien in EXE speichern
 
habe noch ne frage ^^

ich möchte wissen, ob ich dateien, zB andere EXE dateien in meinem delphiprojekt
speichern kann, OHNE eine externe *.RES nehmen zu müssen ...

also so ungefähr, wie bei dem programm installshield!

man packt mehrere dateien in eine exe und diese wiederum extrahiert mehrere
dateien (exe, jpg, dll, usw., was man eben so braucht) ...

kann man auch sowas in delphi coden?

wie gesagt, ich will keine externe *.res!



hmmm oder ... könnte man mit einem befehl *.res dateien in irgendeinem
ausgewählten dateipfad extrahieren? also ich meine die res wieder "auseinander nehmen"
und die dateien, die man in die res gepackt hat wieder rausnehmen?
dann würde ich die externe RES nehmen^^

jaenicke 3. Jun 2009 18:00

Re: Dateien in EXE speichern
 
Wieso externe .res? Die Ressourcendatei wird doch beim Kompilieren in deine Exe eingefügt. :gruebel:

DArc 3. Jun 2009 18:05

Re: Dateien in EXE speichern
 
lol echt?

habe ich garnicht bemerkt xD ...

haha bin ich blöde ...


thx^^



wieder was dazu gelernt^^


edit: zu meiner zweiten frage:

wie kann ich nun die dateien aus der *.res wieder rausholen oder geht das überhaupt?

nat 3. Jun 2009 18:09

Re: Dateien in EXE speichern
 
du könntest die dateien hinten an die exe-datei anhängen.
die exe sollte trotzdem lauffähig sein und kann zur laufzeit aus
sich selber die dateien auslesen. du müsstest nur mit speichern
wie groß die angehängte datei (oder wenn mehrere, wie groß jede
einzelne datei) ist, damit du sie auch wieder auslesen kannst.
so machen es meines wissen auch die selbstentpackenden
zip/rar/etc archive.

DArc 3. Jun 2009 18:11

Re: Dateien in EXE speichern
 
Zitat:

Zitat von nat
du könntest die dateien hinten an die exe-datei anhängen.
die exe sollte trotzdem lauffähig sein und kann zur laufzeit aus
sich selber die dateien auslesen. du müsstest nur mit speichern
wie groß die angehängte datei (oder wenn mehrere, wie groß jede
einzelne datei) ist, damit du sie auch wieder auslesen kannst.
so machen es meines wissen auch die selbstentpackenden
zip/rar/etc archive.

und wie mach ich das ...
tut mir leid für mein zu kleines delphi - wissen^^

nat 3. Jun 2009 18:22

Re: Dateien in EXE speichern
 
du liest die datei die du anhängen willst erstma in einen buffer ein z.B. so
Delphi-Quellcode:
var
  FS: TFileStream;
  Buffer: array of char;
begin
  FS := TFileStream.Create('DateiDieIchAnhängenWill.exe', fmOpenRead);
  try
    setlength(Buffer, FS.size);
    FS.ReadBuffer(Buffer[0], FS.size);
    //die komplette datei ist nun binär in Buffer
    ...
  finally
    FS.free;
  end;
dann öffnest du die datei an die du anhängen willst (z.B. auch so wie oben mit nem TFileStream),
und schreibst ganz ans ende den buffer und (ganz wichtig) dahinter die größe des buffers (length(Buffer)).

das programm, an das du anhängst muß natürlich die funktionen schon beinhalten um von sich
selbst erst die größe auszulesen und dann den eigentlichen "buffer". diesen kannst du dann
wieder in eine datei auf der festplatte schreiben und dann ausführen oder was auch immer.

klingt etwas kompliziert, aber wenn man da erstma durchblickt ist es ganz einfach.

jaenicke 3. Jun 2009 18:37

Re: Dateien in EXE speichern
 
Für das Anhängen habe ich hier eine einfach zu benutzende Möglichkeit gepostet:
http://www.delphipraxis.net/internal....php?p=1043105

Aber wenn du nur Dateien mit der Exe mitliefern willst, ist das ein äußerst unpassender Weg. Da sind Ressourcen genau richtig:
Zitat:

Zitat von DArc
wie kann ich nun die dateien aus der *.res wieder rausholen oder geht das überhaupt?

Dafür kannst du TResourceStream benutzen. Dann hast du direkten Zugriff auf die Daten der Ressource.

nat 3. Jun 2009 18:53

Re: Dateien in EXE speichern
 
Zitat:

Zitat von jaenicke
Aber wenn du nur Dateien mit der Exe mitliefern willst, ist das ein äußerst unpassender Weg. Da sind Ressourcen genau richtig

kommt halt immer auf den anwendungsfall an. wenn du ne feste datei in dein programm kompilieren willst sind ressourcen sicher besser.
soll dein programm aber viele verschiedene dateien angehängt bekommen (wie z.B. bei den schon angesprochenen selbstentpackenden archiven),
dann kannste da nich viel mit ressourcen machen.
kommt halt immer drauf an... wollte ja nur noch eine möglichkeit nennen... weiß ja nicht wozu er es genau verwenden will

jaenicke 3. Jun 2009 18:58

Re: Dateien in EXE speichern
 
Ja, natürlich, deshalb habe ich das ja auch entsprechend eingeschränkt. "Wenn man nur etwas mitliefern will"
Denn so hörte es sich an nach dem Eingangspost. ;-)
Zitat:

Zitat von DArc
man packt mehrere dateien in eine exe und diese wiederum extrahiert mehrere
dateien (exe, jpg, dll, usw., was man eben so braucht) ...


nat 3. Jun 2009 19:06

Re: Dateien in EXE speichern
 
naja, ich war mir da nich so sicher. hatte in nem anderen thread von ihm was von "setup" gelesen.
da dachte ich, vll bastelt er ja an ner setup engine oder sowas.
deshalb wollt ich meinen senf halt auch dazu geben! ;)

DArc 3. Jun 2009 20:08

Re: Dateien in EXE speichern
 
Zitat:

Zitat von nat
naja, ich war mir da nich so sicher. hatte in nem anderen thread von ihm was von "setup" gelesen.
da dachte ich, vll bastelt er ja an ner setup engine oder sowas.
deshalb wollt ich meinen senf halt auch dazu geben! ;)

könntest du ein beispiel programm machen und uns die codes posten? :thumb:

wäre nett!

alzaimar 3. Jun 2009 20:21

Re: Dateien in EXE speichern
 
Wie wäre etwas Eigeninitiative? Was hast Du von Code, den Du noch nicht mal im Ansatz verstehst? Nimm Dir ein Weilchen Zeit, lies die online-Hilfe und ein paar Artikel im Internet zum Thema 'Delphi und Resourcen', dann noch etwas über den Resourcencompiler. Schreib ein paar Testprogrämmchen oder versuche, Daten (Strings, Bilder usw) in einer Resourcen-Datei unterzubrigen. Lade die Daten wieder aus der Resource. usw. Steht ALLES in der OH bzw. bei Bingoogle.

jaenicke 3. Jun 2009 20:22

Re: Dateien in EXE speichern
 
Zitat:

Zitat von DArc
könntest du ein beispiel programm machen und uns die codes posten? :thumb:

Ein kleines Beispiel hat er ja schon gepostet. ;-)

Und TResourceStream geht fast ebenso. Nur dass du als Parameter beim Erzeugen nicht die Datei sondern den Namen und Typ der Ressource angeben musst.

DArc 3. Jun 2009 20:41

Re: Dateien in EXE speichern
 
ich habe nur hier reingepostet, weil:

Zitat:

ich kann dir aber auch ma n kleines beispiel programm machen. dann frag aber bitte nochmal
in dem thread, damit ich dir da dann darauf antworten kann.
so haben dann andere auch was davon.
er wollte, dass andere es auch mitbekommen und die codes sehen ...

habe nur nochmal nachgefragt, weil er das geschrieben hat

Zitat:

... dann frag aber bitte nochmal
in dem thread,
...

lieber frag ich öfters nach und dann verstehe ich es auch 100%-ig ... gibt
ja manche, die das erklärt bekommen haben und es nie richtig verstanden haben
und immer wieder nachfragen ... ich will es, wie schon gesagt 100%-ig, verstehen^^ :thumb:

nat 3. Jun 2009 21:03

Re: Dateien in EXE speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
so, wieder da... war eben etwas beschäftigt.
hab ma auf die schnelle n beispiel zusammen geklatscht.
das könnte man sicher noch optimieren (grade in bezug auf mehrere dateien
die angehängt werden sollen), aber ich denke um die grundlegende
vorgehensweise zu verdeutlichen sollte es ausreichen.
guck dir den source an und versuch ihn zu verstehen.
kannst dir in nem hex editor auch ma die bearbeitete exe-datei angucken
(mit dem text angehängt), is sicherlich auch hilfreich fürs
verständnis. wenn du dann noch fragen hast, dann ist hier der richtige
ort! :)

DArc 4. Jun 2009 20:24

Re: Dateien in EXE speichern
 
cool danke!

mal sehen ob ich das hinbekomme^^ :thumb: werds schon schaffen^^

nat 4. Jun 2009 22:01

Re: Dateien in EXE speichern
 
jojo, kein problem. wie gesagt, gibt noch ne menge optimierungsmöglichkeiten.
man könnte z.B. ganz ans ende (was dann als erstes ausgelesen wird) einen string
speichern um zu erkennen, ob überhaupt was angehängt ist, dann ein integer
wieviele dateien und dann halt für jede datei länge+inhalt.
naja, tüfftel dich da ma durch! :)

jaenicke 4. Jun 2009 22:07

Re: Dateien in EXE speichern
 
Aber wie gesagt: Sollte es sich dabei um feste Daten und DLLs handeln, die das Programm dann benutzt und nicht erst beim Benutzer zur Exe dazukommen, machst du dir mit dieser Methode sehr viel unnötige Mühe. Dann wären Ressourcen eine fertige und einfach benutzbare Möglichkeit dafür. ;-)

nat 5. Jun 2009 23:08

Re: Dateien in EXE speichern
 
und da hat er recht! :thumb:
:-D

Linguini 6. Jun 2009 17:29

Re: Dateien in EXE speichern
 
@nat

Kann es sein, das es zu Fehlfunktionen kommt wenn ich deine 2 Programme mit Delphi 2009 compiliere?
Wenn ich den Text anhänge, und dann mein Programm anhänge kommt sowas raus:

http://s2b.directupload.net/images/090606/5s4378hn.png

nat 6. Jun 2009 17:36

Re: Dateien in EXE speichern
 
das kann sogar sehr gut sein :)
wie ich mitbekommen habe hat der typ von string sich in d2009 geändert (wegen unicode).
ich selber benutze delphi7 und turbo delphi. habe halt einen String "missbraucht" um den
inhalt der dateien dadrin zu speichern. mußt du die funktionen umschreiben, dass die parameter
nicht string sind sondern array of char oder so.

mkinzler 6. Jun 2009 17:39

Re: Dateien in EXE speichern
 
Oder Ansistring

Linguini 6. Jun 2009 17:55

Re: Dateien in EXE speichern
 
Ach das ging leider als gedacht.
Für alle, die es auch in Delphi 09 nutzen wollen, es funktioniert tadellos wenn man einfach jeden String durch AnsiString ersetzt.


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