Entwickler-Ecke
IO, XML und Registry - Streams speichert jeweils nur eine Zeile ab
Orothred - Do 13.09.07 10:37
Titel: Streams speichert jeweils nur eine Zeile ab
So, Versuch nummer 3. Also, mein problem sollte ja mittlerweile bekannt sein, aber nochmal:
ich will in meinem Programm Kopfrechentrainer (siehe Freeware-Projekte) die Ergebnisse eines Spiels in einer Text-Datei speichern. Allerdings wird der Datensatz immer wieder überschrieben und ich finde jeweils nur einen datensatz in der textdatei
was kann ich da tun?
Christian S. - Do 13.09.07 10:39
Je nachdem, mit welcher Methode Du die Datei zum Schreiben öffnest (hier wäre der Quelltext hilfreich), kannst Du meist als zweiten Parameter einen Modus-Angeben. In den meisten Fällen gibt es dann einen "append"-Modus. Aber wie gesagt: Präziser kann man Dir nur Antworten, wenn Du ein wenig von Deinem Quelltext zeigst.
bd.cole - Do 13.09.07 10:40
Wäre gut wenn du Zu deinen Fragen immer den Teil von deinem Code postest um den es geht.
Aber ich denke du kannst eine List<MeineDaten> oder so machen und dann immer die Ergebnisse immer zufügen. Und die Liste dann in die Datei schreiben. Oder willst du dort auch noch die Ergebnisse vom letzten Spiel haben?
Mfg Cole
Orothred - Do 13.09.07 10:42
C#-Quelltext
1: 2: 3: 4: 5: 6:
| string Datei = "Highscore.txt"; FileStream fs = File.OpenWrite(Datei,); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + " " + Punkte + " von " + Anzahl + " Punkte in " + String.Format("{0:00}:{1:00}", Zeit.Minutes, Zeit.Seconds) + " Minuten"); sw.Close(); |
Die Append-Methode würde funktionieren, allerdings weiß ich jetzt nicht genau, wo ich die einbinden muss. außerdem speichert die Append-Methode den nächsten Datensatz ans ende der Datei, ich würde gerne an den anfang speichern
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
JüTho - Do 13.09.07 10:58
Hallo,
für Textdateien gibt es ein ganz einfaches Verfahren:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| using System.IO; string filename = "Highscore.txt"; string myLine = DateTime.Now.ToShortDateString() + "..." + " Minuten") + Environment.NewLine; File.AppendAllText(filename, myLine); |
Du musst nur beachten, dass an den Anfang oder an das Ende CR/LF gehört. Dieses Verfahren ist auch geeignet, wenn ein Buffer aus mehreren neuen Einträgen gespeichert werden kann.
Zusatzbemerkungen: Benutze doch
String.Format() für den gesamten String; das macht es einfacher (und vielleicht auch schneller, weil nicht soviel zwischen verschiedenen Strings und Konvertierungen hin- und hergesprungen werden muss). Den neuen Eintrag
an den Anfang zu setzen, geht nur dadurch, dass die gesamte bisherige Datei kopiert werden muss; am einfachsten ist es wahrscheinlich so:
C#-Quelltext
1: 2: 3:
| string newText = myLine + File.ReadAllText(filename); File.WriteAllText(filename, newText); |
Gruß Jürgen
Orothred - Do 13.09.07 11:03
vielen dank, habs hinbekommen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!