![]() |
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^^ |
Re: Dateien in EXE speichern
Wieso externe .res? Die Ressourcendatei wird doch beim Kompilieren in deine Exe eingefügt. :gruebel:
|
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? |
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. |
Re: Dateien in EXE speichern
Zitat:
tut mir leid für mein zu kleines delphi - wissen^^ |
Re: Dateien in EXE speichern
du liest die datei die du anhängen willst erstma in einen buffer ein z.B. so
Delphi-Quellcode:
dann öffnest du die datei an die du anhängen willst (z.B. auch so wie oben mit nem TFileStream),
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; 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. |
Re: Dateien in EXE speichern
Für das Anhängen habe ich hier eine einfach zu benutzende Möglichkeit gepostet:
![]() Aber wenn du nur Dateien mit der Exe mitliefern willst, ist das ein äußerst unpassender Weg. Da sind Ressourcen genau richtig: Zitat:
|
Re: Dateien in EXE speichern
Zitat:
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 |
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:
|
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! ;) |
Re: Dateien in EXE speichern
Zitat:
wäre nett! |
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.
|
Re: Dateien in EXE speichern
Zitat:
Und TResourceStream geht fast ebenso. Nur dass du als Parameter beim Erzeugen nicht die Datei sondern den Namen und Typ der Ressource angeben musst. |
Re: Dateien in EXE speichern
ich habe nur hier reingepostet, weil:
Zitat:
habe nur nochmal nachgefragt, weil er das geschrieben hat Zitat:
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: |
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! :) |
Re: Dateien in EXE speichern
cool danke!
mal sehen ob ich das hinbekomme^^ :thumb: werds schon schaffen^^ |
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! :) |
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. ;-)
|
Re: Dateien in EXE speichern
und da hat er recht! :thumb:
:-D |
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: ![]() |
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. |
Re: Dateien in EXE speichern
Oder Ansistring
|
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 04:41 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-2025 by Thomas Breitkreuz