.txt-Datei in ..exe einbetten/integrieren
-
Moin,
ich hab ein kleines Programm geschrieben, das im wesentlichen eine immer gleiche Vorlage öffnet, Daten aus dem Internet aktualisiert, in die Vorlage einfügt und unter neuem Namen speichert. D.h. ich habe mein Programm plus die Vorlage.txt, die ich immer zusätzlich mitkopieren muss, da sonst das Prog nicht läuft. Gibts ne Möglichkeit, diese Vorlage so in die Exe zu integrieren, dass ich nur noch eine Datei habe (abgsehen davon, das ganze gleich als char-Array zu initialisieren)?
-
Ich hab eine gute und eine schlechte Nachricht.
Was zuerst? (natürlich die schlechte, dann steigt die Spannung)
Schlechte Nachricht: So wie du's machen willst nicht.
Weil du eine exe nicht während sie ausgeführt wird verändern kannst. Wie wenn du eine txt bearbeitest und sie gleichzeitig versuchst mit einem anderem Programm zu öffnen. Außerdem sind solche Datein wie "Vorlage.txt" dazu da um in ihnen temporäre Dinge zu speichern.Jetzt die Gute: Hier ist eine andere Möglichkeit
Du kannst aber die gesamte aktuelle "Vorlage.txt" zum Programmstart jedesmal aus dem Internet herunterladen und die aktuelle Version benutzen.
-
das geht schon, es gibt mehrere möglichkeiten...
1. die datei wird in den code als riesiges, statisches array eingefügt. man braucht dafür allerdings ein tool, dass beliebige files in C-arrays umwandelt.
2. vielleicht kann dein linker binärdateien einbinden? wenn ja, dann erübrigt sich das tool aus (1).
3. du machst ein hilfsprogramm, das mit standard C file-operationen den text an deine .exe heftet plus eine längenangabe hinten dran. danach kann sich dein programm selber öffnen (fopen, argv[0]), mit fseek ans ende gehen, die länge des textfiles holen und dann mit fseek den anfang der text-resource finden.
... und bestimmt noch einige möglichkeiten mehr.
-
Womit du wieder eine Datei mehr hättest und das gleiche Problem wie ich beschrieben habe: Windows lässt es nicht zu, dass ein Program sich selbst öffnet und berarbeitet auch wenn es nur lesen soll
-
Vox 3D schrieb:
Womit du wieder eine Datei mehr hättest und das gleiche Problem wie ich beschrieben habe: Windows lässt es nicht zu, dass ein Program sich selbst öffnet und berarbeitet auch wenn es nur lesen soll
...klappt schon. probier's aus.
-
Unter Windows könntest du die Textdatei als Ressource einbinden und dann über WinAPI-Funktionen (LoadString() und Kollegen) darauf zugreifen. (ob es für Unix einen vergleichbaren Mechanismus gibt, weiß ich allerdings nicht)
das Tool, das EXE-Hacker in Punkt 1 angesprochen hat, könntest du dir übrigens selber schreiben:
//ungetesteter Pseudocode char line[MAX_LEN]; fprintf(outfile,"const char* vorlage =\n"); while(!feof(infile)) { fgets(line,MAX_LEN,infile); fprintf(outfile,"\"%s\"\n",escape(line)//escape() mußt du selber schreiben - wandelt Sonderzeichen wie Tab und NewLine um in \t bzw. \n } fprintf(outfile,";");
(das Ergebnis kannst du dann per #include in dein Programm integrieren)