Forum: PC-Programmierung c# .txt-Datei weiterschreiben


von Fuzzi59 (Gast)


Lesenswert?

Ich möchte mit c# bei jedem Klick auf einen Button den Text einer 
Textbox in eine neue Zeile hinzufügen.
Folgende txt-Datei habe ich bereits mit dem Editor erstellt:
Hans
Peter
Bernd

Bei einem Klick soll jetzt der Text hinzugefügt werden.
1
            int i = 0;
2
            FileStream Read = new FileStream(Pfad, FileMode.Open);
3
            StreamReader sr = new StreamReader(Read);
4
            while (sr.Peek() != -1)
5
            {
6
                Lines[i] = sr.ReadLine();
7
                i++;
8
            }
9
            sr.Close();
10
            i = 0;
11
            FileStream Write = new FileStream(Pfad, FileMode.Create);
12
            StreamWriter sw = new StreamWriter(Write);
13
            while (i != Lines.Length)
14
            {
15
                sw.WriteLine(Lines[i]);
16
            }
17
            sw.WriteLine(Text);
18
            sw.Close();

Wenn ich jetzt (auch nach schließen des Programms) versuche die Datei im 
Editor zu öffnen, schmiert der Pc ab und muss den Editor mit den 
Taskmanager beenden.
Was ist falsch daran?
Und kann man auch Text hinzufügen ohne die Datei erst zu lesen?

von Peter II (Gast)


Lesenswert?

Fuzzi59 schrieb:
> FileMode.Create

auf die Idee einfach mal in die Doku zu schauen, was es noch so gibt 
bist du nicht gekommen?

http://msdn.microsoft.com/de-de/library/system.io.filemode(v=vs.110).aspx

von Jim M. (turboj)


Lesenswert?

Der gepostete Code schreibt das Laufwerk voll, weil in der 
Schreibschleife das
1
i++;

fehlt.

von bluppdidupp (Gast)


Lesenswert?

Ich würde einfach File.ReadAllLines() / File.AppendAllLines() / 
File.WriteAllLines() nehmen ;D

von Amateur (Gast)


Lesenswert?

Ich kenne mich zwar mit c# nicht aus, aber ich würde mich wundern, wenn 
es kein Append-konstrukt gäbe.
Alles jedes Mal lesen um dann eine Zeile anzuhängen...

von qwertzuiop (Gast)


Lesenswert?

Amateur schrieb:
> ich würde mich wundern, wenn
> es kein Append-konstrukt gäbe.

Du musst dich nicht wundern. "FileMode.Append" wäre die Lösung.
Siehe:
Beitrag "Re: c# .txt-Datei weiterschreiben"

von Dominik S. (dasd)


Lesenswert?

1
FileStream Write = new FileStream(Pfad, FileMode.Append);
2
StreamWriter sw = new StreamWriter(Write);
3
for (int i = 0; i != Lines.Length; i++)
4
{
5
sw.WriteLine(Lines[i]);
6
}
7
sw.Close();

von Fuzzi59 (Gast)


Lesenswert?

Ich habe den Code jetzt sehr eingekürzt:
1
            StreamWriter sw =File.AppendText(Pfad);
2
            sw.WriteLine(text);
die Datei kann ich trotzdem nicht öffnen

von Peter II (Gast)


Lesenswert?

Fuzzi59 schrieb:
> die Datei kann ich trotzdem nicht öffnen

sw.Close() vergessen?

von Fuzzi59 (Gast)


Lesenswert?

Peter II schrieb:
> sw.Close() vergessen?

Nein das hab ich drin

von Dominik S. (dasd)


Lesenswert?

Fuzzi59 schrieb:
> Ich habe den Code jetzt sehr eingekürzt:

Es gibt immer viele Möglichkeiten.
Es geht auch noch kürzer.
1
File.AppendAllLines(Pfad, Lines);

Aber vielleicht verstehst du erstmal was du tust bevor du das ganze 
immer kürzer machst und es erst nicht klappt ;)

von Fuzzi59 (Gast)


Lesenswert?

Ich hab die bestehende Datei gelöscht und jetzt funktionierts.

von Fuzzi59 (Gast)


Lesenswert?

Dominik S. schrieb:
> File.AppendAllLines(Pfad, Lines);

Ja das funktioniert auch. Es lag an der bestehenden Datei.

Dominik S. schrieb:
> Aber vielleicht verstehst du erstmal was du tust bevor du das ganze
> immer kürzer machst und es erst nicht klappt ;)

Das oben müsste auch funktionieren also erst lesen und dann schreiben.
Es lag nur an der verflixten Datei

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.