[C#] Wie kann ich mit "StreamWriter" eine Ressources Textdatei lesen/schreiben?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Dann ist "Properties.Resources.FILE" null - Du musst dem Ding auch einen Wert geben. Oder Du verstehst die Fehlermeldung falsch, die hast Du ja nicht geschrieben.
Und das muss der Dateipfad sein, es gibt auch andere Wege, aber bei denen kannst Du nichts schreiben.

Schreiben: StreamWriter
Lesen: StreamReader

Lies in der Doku oder der IntelliSens-Hilfe nach, welche Methoden es gibt, die Namen sollten ziemlich selbstverständlich sein.

Oder willst Du nur Einstellungen speichern? Da gibt's ein eigenes Settings-Modell (einfach nach "Settings" oder "System.Configuration" suchen), das ist wirklich einfach zu nutzen, aber seit ein paar Jahren nicht mehr aktuell und gerade im professionellen Umfeld fraglich. Eine aktuelle Alternative von Microsoft ist mir nicht bekannt, außer das hervorragende "Microsoft.Extensions.Configuration", allerdings kann das nur lesen.
Also entweder Du liest/schreibst eine eigene Datei (so mache ich es, meist JSON) oder Du greifst auf das alte Konzept zurück.

Ansonsten:

StreamReader und StreamWriter (alles, was IDisposable implementiert) sollten in einem using genutzt werden, außer man braucht bewusst, dass es nicht im using steht.

Ach ja und der Quatsch mit dem direkten Schreiben innerhalb der Assembly, den Zahhak erklärt:
Möglich ja (alles ist möglich), aber lass das.
Sowas kann man mal aus Interesse versuchen und sich dann freuen, wenn's klappt oder man was gelernt hat, aber für mehr taugt es nicht.
Da hab ich dann auch gleich noch einen Tipp: Den Code einer Methode nach dem Start der Anwendung tauschen und ausführen. Ist kompliziert, aber es geht :D

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler
das "Properties.Resources.FILE" null ist

Das wird dann wohl daran liegen, dass "Properties.Resources.FILE" null ist.

Allerdings liegt hier noch ein ganz anderes Problem vor: Die Ressourcen werden zur Compilerzeit in das Assembly eingebunden und können ausschließlich gelesen werden.

Mit schreiben ist da also nix.


XHyperDEVX 
Fragesteller
 16.12.2021, 22:11

Gibt es eine andere Möglichkeit in VS Text innerhalb der .exe zu speichern und zu lesen?

0
Zahhak  16.12.2021, 22:20
@XHyperDEVX

Eher bedingt.

Eine Möglichkeit wäre es, am Ende der Datei einen "Marker" anzubringen, die Datei dann mit

Stream derStream = new FileStream(Assembly.GetCallingAssembly().Location, FileMode.Open, FileAccess.Read | FileAccess.Write, FileShare.Read | FileShare.Write);

zu öffnen, dann den Marker zu suchen und die Zugriffsposition genau dahinter zu platzieren und dort deinen Text hinzuschreiben und/oder auszulesen.

Allerdings gibt es dabei zwei Dinge zu beachten:

  1. Der Marker darf vorher nirgendwo in der Datei als ganzes vorkommen.
  2. Es könnte auch gut sein, dass zumindest Schreibzugriffe auf diese Weise gar nicht machbar sind. Das hängt u.a. davon ab, wie das Betriebssystem Prozesse und deren geöffnete Dateien handhabt.
0
Palladin007  16.12.2021, 22:55
@Zahhak

Schlägst Du vor, direkt in die aktuellen Assembly zu schreiben?
Bist Du irre??

Mal abgesehen davon, dass die Assembly geladen und vermutlich gesperrt ist und Programm-Assemblies aus Sicherheitsgründen grundsätzlich schreibgeschützt sein sollten, kann man dabei verdammt viel kaputt machen.

Wenn man wirklich so einen quatsch machen will, dann mit Mono.Cecil, das müsste sowas auch können, nur ohne das große Risiko, irgendwas kaputt zu machen.

Aber ganz ehrlich:
So'n Quatsch hab ich schon sehr lange nicht mehr gelesen ...

0
Zahhak  16.12.2021, 23:08
@Palladin007
Schlägst Du vor, direkt in die aktuellen Assembly zu schreiben?

Nein, ich sage lediglich, dass das, so es denn funktionieren sollte, die einzige Möglichkeit ist, halbwegs exakt das, wonach der FS gefragt hat zu erreichen.

Bist Du irre??

Ein wenig. Aber wenigstens bin ich nicht so ein Spinner wie du, der ohne jeden Grund einfach Beleidigungen auskackt.

So'n Quatsch hab ich schon sehr lange nicht mehr gelesen ...

Dann solltest du mal den Müll lesen, den du hier verzapfst...

P.S.: Ich habe nie behauptet, dass dieses Verfahren eine gute Idee, geschweige denn eine saubere Herangehensweise wäre. Aber es ist eine grundsätzlich nicht unmöglich durchzuführende Weise, das Gefrage umzusetzen.

0
Palladin007  16.12.2021, 23:11
@Zahhak
die einzige Möglichkeit ist, halbwegs exakt das, wonach der FS gefragt hat zu erreichen.

Möglich - wenn man das so interpretieren möchte, ich finde die Frage dafür etwas zu schwammig formuliert.

Das eigentliche Ziel wird aber eher sein, irgendetwas in eine Datei zu speichern, z.B. um es bei einem späteren Start wieder lesen zu können - Einstellungen eben.
Und das wiederum ist ist kein Problem.

0
Palladin007  16.12.2021, 22:51
Die Ressourcen werden zur Compilerzeit in das Assembly eingebunden und können ausschließlich gelesen werden.

Wenn das der Pfad zu einer Datei ist, reicht das doch?
StreamReader und StreamWriter nehmen auch Dateipfade an.

0