Entwickler-Ecke
Dateizugriff - stringlist in exe speichern
Chrischuh - Di 20.01.09 15:47
Titel: stringlist in exe speichern
Hallo,
ist es möglich eine stringlist in einer exe zu speichern?
ich nutze folgene funktion um eine ressource zu laden:
Delphi-Quelltext
1:
| ResourceStream:= TResourceStream.Create (hinstance, 'NAME', RT_RCDATA); |
Geht das auch umgekehrt? Also den ResourceStream wieder in den Resourcen speichern.
Wahrscheinlich darf die Exe zur Laufzeit nich geändert werden, deswegen möchte ich das mit einer 2. Exe machen.
Oder ist das unnötig.
Narses - Di 20.01.09 16:55
Titel: Re: stringlist in exe speichern
Moin!
Chrischuh hat folgendes geschrieben : |
ist es möglich eine stringlist in einer exe zu speichern? |
Jain, du kannst aber die Stringliste mit SL.CommaText in einen String verwandeln, welchen du relativ problemlos in Ressourcenblock ablegen können solltest. :idea:
Chrischuh hat folgendes geschrieben : |
Wahrscheinlich darf die Exe zur Laufzeit nich geändert werden, deswegen möchte ich das mit einer 2. Exe machen. |
Löschen kann man eine aktive EXE nicht, aber umbenennen, deshalb würde es mich nicht wunden, wenn man auch den Inhalt ändern können sollte. :nixweiss:
Es gab hier mal ein Projekt (ich weiß leider nicht mehr von wem oder wie´s hieß), bei dem es darum ging, Ressourcen zu Lesen und zu Schreiben. Such doch mal ein bischen hier. ;)
cu
Narses
jaenicke - Di 20.01.09 17:05
Titel: Re: stringlist in exe speichern
Narses hat folgendes geschrieben : |
Löschen kann man eine aktive EXE nicht, aber umbenennen, deshalb würde es mich nicht wunden, wenn man auch den Inhalt ändern können sollte. :nixweiss: |
Nicht direkt, man kann die laufende Exe aber umbenennen, kopieren und dann die neue starten.
jaenicke - Di 20.01.09 18:01
So, ich habe grade mal eine kleine Demo geschrieben, diese liegt im Anhang.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| RenameFile(ParamStr(0), ChangeFileExt(ParamStr(0), '.exe.bak')); CopyFile(PChar(ChangeFileExt(ParamStr(0), '.exe.bak')), PChar(ParamStr(0)), True); FileContents := TFileStream.Create(ParamStr(0), fmOpenReadWrite); ...
FileContents.Free; ShellExecute(Handle, 'open', PChar(ParamStr(0)), '/delbak', PChar(ExtractFileDir(ParamStr(0))), SW_SHOWNORMAL); Close; |
Und in FormCreate die zweite Datei löschen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm136.FormCreate(Sender: TObject); begin {$B-} if (ParamCount > 0) and (ParamStr(1) = '/delbak') then while FileExists(ChangeFileExt(ParamStr(0), '.exe.bak')) do begin DeleteFile(ChangeFileExt(ParamStr(0), '.exe.bak')); Sleep(1); end; end; |
In der Demo hänge ich jetzt Daten an die Exe an, das mache ich aber nur um zu zeigen, dass die Exe so verändert werden kann. Du kannst an der Stelle dann deine Ressource verändern. (Aber da weiß ich aus dem Kopf nicht wo ich da was verändern muss, deshalb hab ich das in der Demo nicht gemacht. ;-))
Narses - Di 20.01.09 18:46
Moin!
@
jaenicke: Irgendwie sehe ich das Thema jetzt schon mehrfach. :gruebel: Da lohnt doch schon fast ein FAQ-Eintrag, oh großer Tutorializer... :zustimm:
cu
Narses
jaenicke - Di 20.01.09 20:53
Aus der Überlegung heraus habe ich das auch geschrieben. ;-)
Aber ich bin mit dem letzten ja noch nicht fertig. Und und... :mrgreen:
Aber sonst hätte ich bei einem Beispiel nicht so darauf geachtet, dass es einigermaßen sauber geschrieben ist. :mrgreen:
Chrischuh - Di 20.01.09 21:31
super, genau was ich gesucht hatte. Danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!