none
Gespeichertes txt File von TextBox wieder einlesen RRS feed

  • Frage

  • Hallo.

    Ich habe einen Code in C# (WPF) für ein Telefonbuch geschrieben.

    Vorname, Nachname und Nummer werden in einer Textbox gespeichert.

    Wenn ich nun die .txt Datei auf meinem Desktop speichere und im Programm unter "Öffnen" wieder öffnen möchte zeigt mir die Textbox nichts an.

    Code:

    public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } string Vorname; string Nachname; string Nummer; string Ergebnis; #region TEXTFELDER private void MenuItem_Click(object sender, RoutedEventArgs e) { Vorname = txtVorname.Text; Nachname = txtNachname.Text; Nummer = txtNummer.Text; Ergebnis = "Vorname: " + Vorname + "Nachname: " + Nachname + "\nNummer: " + Nummer + "\n\n"; txtErgebnis.Text += Ergebnis; } #endregion #region BEENDEN private void MenuItem_Click_1(object sender, RoutedEventArgs e) { this.Close(); } #endregion #region SPEICHERN private void MenuItem_Click_2(object sender, RoutedEventArgs e) { FileStream fs = null; Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); dlg.FileName = "Document"; // Default file name dlg.DefaultExt = ".text"; // Default file extension dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension // Show save file dialog box Nullable<bool> result = dlg.ShowDialog(); // Process save file dialog box results if (dlg.FileName != "") { System.IO.StreamWriter datei = new System.IO.StreamWriter(dlg.FileName); datei.Write(txtErgebnis.Text); datei.Close(); //System.IO.FileStream fs = // (System.IO.FileStream)dlg.OpenFile(); } fs.Close(); } #endregion #region ÖFFNEN private void MenuItem_Click_3(object sender, RoutedEventArgs e) { FileStream fs = null; Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); dlg.DefaultExt = ".txt"; dlg.Filter = "Telefonbuch (.txt) | *.txt | Alle Datein| *.* "; if (dlg.ShowDialog() == true) { try {

    (Diesen Code habe ich von einem Paint Programm wo ich InkCanvas verwendet habe, ich habe keine Ahnung

    wie ich ihn umschreiben soll das ich txt File öffnen kann) fs = new FileStream(dlg.FileName,FileMode.Open, FileAccess.Read); StrokeCollection strokes = new StrokeCollection(fs); txtErgebnis.Text = strokes; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if(fs != null) fs.Close(); } } } #endregion #region LÖSCHEN private void btnFelderLoeschen_Click(object sender, RoutedEventArgs e) { ZeilenLöschen(); } private void btnRegisterLoeschen_Click(object sender, RoutedEventArgs e) { MessageBoxResult result = MessageBox.Show("Wirklich das komplette Register löschen?", "Register löschen", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) AllesLöschen(); } public void ZeilenLöschen() { txtVorname.Text = ""; txtNachname.Text = ""; txtNummer.Text = ""; } public void AllesLöschen() { txtVorname.Text = ""; txtNachname.Text = ""; txtNummer.Text = ""; } #endregion } }

    Vielen Dank fürs erste!

    Freitag, 18. September 2015 07:38

Antworten

  • Hallo Matthias!

    Wenn ich das richtig verstanden habe ist wohl dieser Code der einfachste:

    System.IO.StreamReader sr = new System.IO.StreamReader(Environment.GetFolderPath(dlg.FileName);
    textBox.Text = sr.ReadToEnd();
    sr.Close();

    Ich hoffe es hilft dir!


    By_The_Dani :P

    Programmiersprachen: C# (Windows Forms), Java


    Samstag, 19. September 2015 07:45
  • Hallo,

    den Teil zum Auslesen der Textdatei kannst Du folgendermaßen ändern:

    txtErgebnis.Text = File.ReadAllText ( dlg.FileName );
    Ist ein bisschen einfacher als der FileStream (bei dem Du übrigens immer einen using-Block verwenden solltest)

    Montag, 21. September 2015 08:16

Alle Antworten

  • Hallo Matthias,

    ich bin mir nicht ganz sicher, ob man die Frage (welche eigentlich?) sinnvoll beantworten kann.

    Die StrokeCollection erscheint mir aber hier nicht sinnvoll, vielleicht solltest du die in deinem Paint-Programm belassen und dir vielleicht nebenbei Klarheit darüber verschaffen, was "Strokes" sind und welchen Sinn die StrokeCollection hat.

    Wenn mich mein Eindruck nicht täuscht, trägst du die gewünschten Informationen in Textfelder ein, kombinierst diese dann in ein weiteres Textfeld und speicherst diesen zusammengesetzten String dann in eine Datei. Nebenbei, Willst du wirklich für jeden Eintrag eine eigen Datei anlegen?

    Eine Möglichkeit, eine Textdatei (insbesondere kleine Dateien) einzulesen, wäre exemplarisch:

          string pfad = @"d:\test.txt";
          string inhalt = "Wilhelm;Tell;112";
    
          // neue Datei
          using (System.IO.StreamWriter sw = new System.IO.StreamWriter(pfad)) {
            sw.Write(inhalt);
          }
          // an bestehende Datei anhängen oder neue Datei
          using (System.IO.StreamWriter sw = new System.IO.StreamWriter(pfad, append:true)) {
            sw.Write(inhalt);
          }
          // bestehende Datei einlesen {System.IO.File.Exists(pfad) kann helfen}
          using (System.IO.StreamReader sr = new System.IO.StreamReader(pfad)) {
            inhalt = sr.ReadToEnd();
          }
    
          // Alternativen
          System.IO.File.WriteAllText(pfad, inhalt);
          System.IO.File.AppendAllText(pfad, inhalt);
          inhalt = System.IO.File.ReadAllText(pfad);

    Vielleicht hilft es ja weiter...

    Freitag, 18. September 2015 15:20
  • Hallo Matthias!

    Wenn ich das richtig verstanden habe ist wohl dieser Code der einfachste:

    System.IO.StreamReader sr = new System.IO.StreamReader(Environment.GetFolderPath(dlg.FileName);
    textBox.Text = sr.ReadToEnd();
    sr.Close();

    Ich hoffe es hilft dir!


    By_The_Dani :P

    Programmiersprachen: C# (Windows Forms), Java


    Samstag, 19. September 2015 07:45
  • Hallo,

    den Teil zum Auslesen der Textdatei kannst Du folgendermaßen ändern:

    txtErgebnis.Text = File.ReadAllText ( dlg.FileName );
    Ist ein bisschen einfacher als der FileStream (bei dem Du übrigens immer einen using-Block verwenden solltest)

    Montag, 21. September 2015 08:16
  • Ich bin eben leider noch Anfänger und es tut mir leid wenn ich manchmal wirklich blöde Fragen, aber ich befinde mich momentan in so einem Kurs weil ich unheilbar krank bin und muss jetzt eben Informatiker lernen, MfG Matthias

    Freitag, 23. Oktober 2015 09:41