StreamReader, StreamWriter | Aus Datei lesen, bearbeiten und wieder in Datei schreiben

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von DaNeubi.

    StreamReader, StreamWriter | Aus Datei lesen, bearbeiten und wieder in Datei schreiben

    Hallo Leute,

    ich stehe hier gerade vor einem kleinen Problem.

    Ich versuche folgendes:

    Man kann eine Datei auswählen z.B. eine .txt diese wird dann in eine richtextbox übertragen. Dort kann man sie nach belieben bearbeiten und wenn man fertig ist
    klickt man auf speichern und das ganze wird überschrieben.

    Nur habe ch das Problem, dass ich es zwar einlesen und auch korrekt in die richtextbox übertragen kann, doch wenn ich es speicher will wird alles in eine Zeile geschrieben,
    auch wenn es in der Datei mehrere Zeilen sind...


    Hier mein Code:

    C#-Quellcode

    1. private void button5_Click(object sender, EventArgs e) // einlesen der ausgewählten Datei
    2. {
    3. var dir = Directory.GetCurrentDirectory();
    4. OpenFileDialog furtheredit = new OpenFileDialog();
    5. furtheredit.Filter = "Zugel. Formate | *.jar| tml's |*.tml| hqm's |*.hqm| txt |*.txt| cfg's |*.cfg| json's |*.json| ini's |*.ini| properties |*.properties| txt |*.txt"; // *.tml, *.txt, *.hqm, *.cfg, *.json, *.ini, *.properties";
    6. furtheredit.InitialDirectory = dir;
    7. furtheredit.Title = "Dateien Modifizieren";
    8. if (furtheredit.ShowDialog() == DialogResult.OK)
    9. {
    10. var name = Path.GetFileName(furtheredit.FileName);
    11. var path2 = Path.GetDirectoryName(furtheredit.FileName);
    12. var data = path2 + @"\"" + name; // Das zweite ' " ' ist nur da weil mir hier sonst irgendwie der ganze restliche untere Text rot wird....
    13. Properties.Settings.Default.toeditfurther = data;
    14. try // versucht das zu bearbeitene objekt zu lesen
    15. {
    16. using (StreamReader reader = new StreamReader(data))
    17. {
    18. string lesn;
    19. lesn = File.ReadAllText(data);
    20. string lesn = reader.ReadToEnd();
    21. richTextBox6.Text = lesn;
    22. reader.Close();
    23. }
    24. }
    25. catch(Exception f)
    26. {
    27. richTextBox4.Text = f.ToString();
    28. }
    29. }
    30. }
    31. private void button6_Click(object sender, EventArgs e) // speichern der ausgewählten Datei (es wird nicht zeile für zeile geschrieben sonder alles auf einmal)
    32. {
    33. var ziel = Properties.Settings.Default.toeditfurther;
    34. try
    35. {
    36. if (richTextBox6.Text != "")
    37. {
    38. string towrite = richTextBox6.Text;
    39. using (StreamWriter writer = new StreamWriter(ziel))
    40. {
    41. writer.WriteLine(towrite);
    42. writer.Close();
    43. }
    44. }
    45. else
    46. {
    47. MessageBox.Show("Upps da ist ein Fehler aufgetreten, der Text den du schreiben möchtest ist leer, oder die Datei konnte nicht mehr gefunden werden.", "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    48. }
    49. }
    50. catch (Exception f)
    51. {
    52. richTextBox5.Text = f.ToString();
    53. }
    54. }


    Danke im vorraus.

    LG
    DaNeubi

    *EDIT*
    Hab vergessen
    " richTextBox6.Text = lesn;" einzufügen sry...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DaNeubi“ ()

    DaNeubi schrieb:

    in die richtextbox übertragen
    So was:

    VB.NET-Quellcode

    1. Me.RichTextBox1.LoadFile(path, RichTextBoxStreamType.PlainText)
    2. ' bzw.
    3. Me.RichTextBox1.SaveFile(path, RichTextBoxStreamType.PlainText)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ChOoSeMyNaMe schrieb:

    Würde bei sowas eigentlich nicht auf StreamReader/Writer zurückgreifen, sondern auf die Funktionen von der File-Klasse.


    Hab ich auch schon Probiert mit

    C#-Quellcode

    1. File.WriteAllLines(data, lesn);
    2. File.WriteAllText(data, lesn);


    Aber da kommt ganz genau das selbe raus...
    @DaNeubi Der Code aus meinem Snippet schreibt und liest RichTextBox-Text korrekt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!