C# .txt Datei lesen & schreiben?
Hallo, ich habe ein Programm entwickelt, dass in eine Textdatei z.B. "Hallo" schreibt.
Also der User der das Programm bedient, kann eine bestimmte Sache z.B. Hallo eingeben, und dann wird dies in das Textdokument geschrieben. Mein Problem, dass in der 2. Zeile ein Leerzeichen bzw. der Cursor ist & daher beim auslesen der Datei das Ergebnis nicht übereinstimmt, da in der nächsten Zeile eben generiert wurde.
Kann ich irgendwie einstellen, dass der Reader statt allem nur eine bestimmte Zeile liest?
Könntest du hier ein paar Zeilen Code hinzufügen, wie du schreibst/liest? Dann lässt es sich einfacher ergänzen/korrigieren.
https://just-paste.it/4FqpN29iw0
2 Antworten
Am besten wäre es, wenn du zum Lesen und Schreiben nur die Klassen StreamWriter und StreamReader verwenden würdest und von diesen jeweils die Methoden WriteLine bzw. ReadLine, um den Text zeilenweise zu schreiben bzw. zu lesen. StreamWriter.WriteLine(string) schreibt eine Zeile (ohne Zeilenumbruch) in die Textdatei, die dem Konstruktor übergeben wird.
Beim Lesen der Datei kannst du mit der Eigenschaft EndOfStream des StreamReaders solange aus der Datei auslesen, bis kein Inhalt mehr vorhanden ist. Sofern die Anzahl Zeilen der Textdatei statisch ist und von Anfang an feststeht, ist gegen den Gebrauch eines String-Arrays, wie @DonkeyShot es vorschlug, nichts einzuwenden. Um sicherzugehen, empfehle ich persönlich eher eine generische Liste vom Typ String. Auf die einzelnen Elemente der Liste kann man genauso zugreifen, wie beim Array. Hier ein Beispiel für das Auslesen einer Textdatei:
List<string> ReadFile(string path)
{
List<string> result = new List<string>();
// using schließt die Datei automatisch, sodass die Close()-Methode nicht aufgerufen werden muss
using(StreamReader sr = new StreamReader(path))
{
// solange bis Dateiende erreicht wurde wird gelesen
while(!sr.EndOfStream)
{
result.Add(sr.ReadLine());
}
}
return result;
}
Sehe ich's richtig, dass du alle Dateien mit File.ReadAllText einliest?
Gibt mehrere Möglichkeiten. #1: Du schreibst nicht mit WriteLine sondern mit Write, dann wird auch kein Zeilenumbruch geschrieben. #2: Du arbeitest mit einem StreamReader und rufst ReadLine auf. Dann steht im gelesenen String nur der Zeileninhalt ohne Zeilenumbruch. #3: Mit File.ReadAllLines alle Zeilen der Datei in ein Array einlesen und nur auf das erste Element zugreifen. Variante #1 wird vermutlich am besten passen. Dann bräuchtest du auch keinen StreamWriter, sondern kannst die Datei einfach mit File.WriteAllText erstellen.