C# Texteingaben speichern und laden (StreamWriter!?)

papanini

Ensign
Dabei seit
Feb. 2014
Beiträge
206
Hallo Community,

ich bilde mich gerade im Bereich C# fort und entwickle ein weiteres Programm zu Übungszwecken.
Mein aktuelles Anstreben: Möglichst einfach und effizient Eingaben (z.B. für Einstellungen und Namensänderungen) speichern und verarbeiten können.
Der Punkt mit der Verarbeitung sollte das geringere Problem sein, eher das "automatische" Laden, sprich, nach Beenden und erneutem starten des Programmes sollen alle Eingaben noch vorhanden sein.

Dazu habe ich erfolgreich eine komplizierte Variante mit dem herausschreiben der Inhalte der Textboxen in eine XML Datei hingebracht, allerdings erscheint mir das zu kompliziert für meinen einfachen Zweck.

Vorher bin ich auf den StreamWriter gestoßen und habe dazu folgenden Code geschrieben:
Code:
namespace save_properties
{
    public class StreamWriter : TextWriter //Fehler 1
    {
        StreamWriter sw_p = null;   //Implementiert einen TextWriter zum Schreiben von Zeichen in einen Stream in einer bestimmten Codierung.

        void save_p()
        {
            try     //Daten schreiben
                {
                    sw_p = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "data.txt")); //Fehler 2
                    sw_p.WriteLine("variante1");
                    sw_p.WriteLine("variante2");
                    sw_p.WriteLine("variante3");
                    sw_p.WriteLine("einnahme");
                    //...
                }

                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

                finally
                {
                    sw_p.Close();
                }
        }
    }
}

Ich erhalte dafür folgende Fehlermeldungen:
Fehler 1 'save_properties.StreamWriter' implementiert den geerbten abstrakten Member 'System.IO.TextWriter.Encoding.get' nicht. C:\Users\papanini\documents\visual studio 2013\Projects\Money View\Money View\Save_properties.cs 16 18 Money View

Fehler 2 "save_properties.StreamWriter" enthält keinen Konstruktor, der 1-Argumente akzeptiert. C:\Users\papanini\documents\visual studio 2013\Projects\Money View\Money View\Save_properties.cs 24 28 Money View


Über hilfreiche Antworten dazu und anderen Lösungen dazu bin ich sehr dankbar :D
 
Du erstellst mit deinem Code eine Klasse StreamWriter, die von TextWriter erbt.
Es gibt in C# aber bereits eine Klasse, die StreamWriter heißt. Genauso eine TextWriter Klasse.
Deshalb kommt es hier zum Fehler.

Du brauchst ein using System.IO;
Und du musst deine Klasse irgendwie umbenennen.
Außerdem ist es unnötig sie von TextWriter erben zu lassen, außer du möchtest wirklich OOP vorgehen und keine Objekte fremder Klassen instanziieren, sondern alles in deiner Klasse implementieren.
 
Zuletzt bearbeitet:
Die Klasse System.IO.File bietet einige interessante Methoden.
Willst du bei den Streams bleiben, schau dir auch mal das Schlüsselwort using an.
 
Zitat von Degra:
Du erstellst mit deinem Code eine Klasse StreamWriter, die von TextWriter erbt.
Es gibt in C# aber bereits eine Klasse, die StreamWriter heißt. Genauso eine TextWriter Klasse.
Deshalb kommt es hier zum Fehler.

Du brauchst ein using System.IO;
Und du musst deine Klasse irgendwie umbenennen.
Oh, es ist durchaus möglich - wenn vielleicht auch nicht übermäßig sinnvoll - dass er seine eigene Klasse StreamWriter nennt und zugleich innerhalb dieser Klasse die schon existente Klasse Syste.IO.StreamWriter verwendet. Dazu müssen nur die Namensräume verschieden sein, was sie ja sind, da seine Klasse den Namensraum save_properties hat. Er darf dann nur kein using System.IO machen, da der Compiler dann beide Klassen nicht mehr auseinanderhalten kann. Die save_p()-Methode könnte z.B. so aussehen:
Code:
void save_p()
{
    try //Daten schreiben
    {
        sw_p = new System.IO.StreamWriter(
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), 
            "data.txt")); 
        //...
    }
    catch (Exception e)
    {
        //...
    }
}
Allerdings sollte seine Klasse, wenn sie denn von System.IO.TextWriter erben soll, die Encoding-Property implementieren.
 
Das ganze manuell zu speichern und wieder auszulesen ist für den Anfang vielleicht einmal interessant, aber nicht professionell (sehr Fehler behaftet), geschweige denn praktisch (Aufwand).

Um so etwas zu bewerkstelligen kann man Serializer wie z.B. den bereits vorhanden XmlSerializer nutzen.
 
Zurück
Top