Laden...

Aus Text Datei lesen

Erstellt von Brainbug01 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.188 Views
B
Brainbug01 Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren
Aus Text Datei lesen

Hallo Zusammen,

ich bin neu hier und ja ich bin schon länger in Foren unterwegs und weis wie es ist neu zu sein. Man stellt "dumme" Fragen und hofft innerhalb kurzer Zeit die Lösung sofort in der nächsten Antwort zu erhalten. Dem muss nicht so sein 😁
Ich bin seit gut 1 Woche dran C# zu lernen und meine zweite kleine Anwendung läuft soweit.
Eine Zahl wird aus einer Datei gelesen und in ein Textfeld eingetragen. Beim klick auf einen Button wird die Nummer um 1 erhöht, zurück in die Datei geschrieben und in die Zwischenablage kopiert. ( Erste Anwendung war Primzahlen ausgeben, funktioniert auch ). Ich versuche mich mit dem Thema zu beschäftigen uns lese viel um Netz und habe einen Video Kurs + Buch gekauft. Nun zu meinem Problem.

Die Nummer lese ich ein:

public string path = @"C:\Temp\Nummer.txt";

Jetzt ist allerdings der Pfad zu Datei im Projekt fest verankert. Möchte jemand die Datei an einem anderen Ort haben geht dies momentan nur über das Projekt zu ändern. Deshalb die Idee den Pfad in der Art .ini abzulegen:

// In der Pfad.ini wird als Text der Pfad zur .txt geschrieben in der die Nummer steht
// Inhalt der Pfad.ini:
// C:\Temp\Nummer.txt
public string PfadzurIni = @"C:\Temp\Pfad.ini";
// Und hier soll der Pfad, der in der Pfad.ini steht, genommen werden um die Nummer zulesen
public string PfadzurNummer = System.IO.File.ReadAllText(PfadzurIni);

Fehlermeldung:> Fehlermeldung:

Ein Feldinitialisierer kann nicht auf das nicht statische Feld bzw. die nicht statische Methode oder Eigenschaft "Form1.PfadzurIni" verweisen.

Natürlich habe ich schon einige versuche unternommen die Lösung im Netz zu finden. Leider ohne Erfolg.
Könnte mir jemand unter die Arme greifen und mich unterstützen?

16.806 Beiträge seit 2008
vor 4 Jahren

Aaaabsolute Grundlagen vom Aufbau von C#. =)
Aber jeder hat klein angefangen.

public string PfadzurNummer = System.IO.File.ReadAllText(PfadzurIni);

Das geht nicht - ging nie, wird nie gehen.

Das muss in dieser Form innerhalb einer Methode oder Eigenschaft verwendet werden, da die Quelle (der Pfad) veränderlich ist.
Eine Quelle in der Feldinitialisierung muss unveränderlich sein.

zB (mit Syntaxzucker)

public string PfadzurNummer {get;} => System.IO.File.ReadAllText(PfadzurIni);

zB (ohne Syntaxzucker)

public string PfadzurNummer {get { return System.IO.File.ReadAllText(PfadzurIni); } }

PS: wenn es Dir möglich ist (und das nicht gerade eine Vorgabe oder Übung sein soll), dann verzichte auf Ini-Dateien. Die gehören in die Mottenkiste.
Verwende XML oder Json; die lassen sich validieren und auch direkt mit .NET Boardmitteln sauber verarbeiten (Ini nicht so wirklich).

B
Brainbug01 Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren

@Abt
Danke erstmal.
Eine Vorgabe ist es schon aber ich kann ja argumentieren das .ini nicht gut ist, es gibt ja einen Grund. Den Grund muss ich natürlich selber noch nachlesen und verstehen. Deine Aussage zu nehmen ist mir zu einfach ich möchte es ja auch verstehen warum es so ist.
get und set kommen noch im Video Kurs sowie im Buch dran. Ich bin mit der Aufgabe wohl etwas zu früh oder habe die Grundlagen nicht verstanden.

16.806 Beiträge seit 2008
vor 4 Jahren

Schau Dir den Unterschied von Feldern und Eigenschaften, sowie das Thema static, const etc in C# an.
Dann siehst Du, wieso Deine Zeile mit einem veränderlichen Feld nicht klappt / klappen kann.

Was aber technisch zumindest gehen würde wäre, wenn Du den Pfad als static oder const (als Konstante) definierst, und diese Variable dann in der Feldinitialisierung nutzt.

public static string PfadzurIni = @"C:\Temp\Pfad.ini";
public string PfadzurNummer = System.IO.File.ReadAllText(PfadzurIni);

Dadurch ist der Pfad zur Ini nicht veränderbar und kann als Quelle für die Feld-Initialisierung verwendet werden.

B
Brainbug01 Themenstarter:in
3 Beiträge seit 2020
vor 4 Jahren

Hilfe zur xml habe ich gerade hier gefunden: [Tutorial] Dateioperationen: Alles über Dateien 2.2 Da steht schon sehr viel was ich probieren möchte.

P
441 Beiträge seit 2014
vor 4 Jahren

Das Tutorial wurde für .NET Framework 2.0 geschrieben.

Prinzipiell funktioniert das alles noch, aber gerade bei IO gibt es seit ein paar Jahren Nebenläufige Konzepte mit async & await, die sich in vielen der API's wieder finden.
Das ist vor allem dann praktisch, wenn du mit UI's arbeitest.

4.931 Beiträge seit 2008
vor 4 Jahren

Statt direkt mit INI oder XML zu arbeiten, ist hier eher [Tutorial] Konfigurationsmodell im .NET Framework zu bevorzugen (welches zwar auch auf XML basiert, aber die direkten Zugriffe auf einzelne Eigenschaften anbietet).

Edit: Leider wurden die Bilder im Artikel beim internen Umzug des Forums wohl nicht mitportiert (welche ich persönlich sehr hilfreich dort fand).

Edit2: In App.Config: Basics and Best Practices (u.a. unter "Settings") gibt es aber ähnliche Bilder dazu, welche die UI im VS zeigen.