Ich habe eine portable ausführbare Datei, die Daten in einer Datei im selben Ordner wie die ausführbare Datei speichert. Gibt es eine Möglichkeit, dass ich Daten in der ausführbaren Datei selbst speichern kann, wenn ich die App schließe?
Das ist vielleicht komisch, aber ich nehme die Daten mit und habe nur eine Datei für die exe und die Daten wären toll.
Würde es vorziehen, wenn dies mit C # gemacht wurde, aber nicht erforderlich ist.
Sie können Ihre eigene EXE nicht so ändern, dass sie gespeicherte Daten in einem eleganten oder kompakten Format enthält. Zunächst erhält das Betriebssystem eine Sperre für die EXE-Datei, während die darin enthaltene Anwendung ausgeführt wird. Zweitens kommt eine EXE vorkompiliert (zumindest in MSIL), und eine Änderung der Quelldaten der Datei erfordert normalerweise eine Neukompilierung, um verschiedene Zeiger auf Code-Handles zurückzusetzen, oder ein ERNSTES Wissen auf einer sehr esoterischen Ebene darüber, was Sie tun die Datei.
Die allgemein akzeptierten Methoden sind die Anwendungskonfigurationsdatei, eine Ressourcendatei oder eine benutzerdefinierte Datei, die Sie zur Laufzeit erstellen / lesen / ändern, wie Sie es jetzt tun. Zwei Dateien für eine Anwendung sollten kein Grund zur Sorge sein
Sie können Platz reservieren, indem Sie eine String-Ressource verwenden und aufteilen. Sie müssen ein wenig Detektivarbeit machen, um genau herauszufinden, wo im Offset zur ausführbaren Datei die Daten gespeichert werden sollen, aber seien Sie vorsichtig, die Datei wird " in Verwendung " sein, also fahren Sie fort vorsichtig damit.
Sie verwenden also gerade eine Datei app.config (und Settings.settings)? Ich glaube, das ist die kompakteste Art, Daten nahe der .exe-Datei zu speichern.
Ich würde sehr bezweifeln, dass Sie das Manifest der .exe oder eines anderen Teils davon ändern können.
Edit: Anscheinend könnte es doch einige Wege geben: Ссылка
Es gibt eine Möglichkeit, mehrere Streams zu verwenden, aber nur in NTFS-Dateisystemen.
Mit NTFS können Sie alternative "benannte" Streams in einer Datei definieren. Der übliche Inhalt ist im main = unbenannten Stream. Es hat etwas mit den zusätzlichen Informationen zu tun, die Sie sehen können, wenn Sie mit der rechten Maustaste auf eine Datei klicken und Eigenschaften überprüfen.
Leider hat C # keine Unterstützung für mehrere Streams, aber es gibt Open Source-Projekte, die Ihnen helfen können.
Siehe diesen Link für einen netten Wrapper zum Lesen und Schreiben mehrerer Streams in eine einzige Datei in C #.
Alternative Datenströme funktionieren möglicherweise. Mit der :: stream-Syntax können Sie einen Datenstrom innerhalb Ihrer exe erstellen und Daten lesen / schreiben. Bearbeiten: Um einen alternativen Datenstrom zu erstellen / darauf zuzugreifen, verwenden Sie einen anderen Dateinamen. Etwas wie: application.exe: Einstellungen: $ data Dadurch wird auf einen Datenstrom namens "settings" in application.exe zugegriffen. Dazu müssen Sie beim Lesen oder Schreiben in die Datei die folgenden Einstellungen hinzufügen: settings: $ data. Diese Funktionalität wird von ntfs zur Verfügung gestellt, so dass es in c # funktioniert und sollte funktionieren, wenn die Anwendung läuft.
Weitere Informationen finden Sie unter Ссылка
Sie können Daten zum Ende der ausführbaren Datei hinzufügen:
%Vor%Tags und Links c# portable-executable