Mittwoch, 9. Oktober 2013

Datei öffnen

Heute mal ein recht einfaches Thema, das aber bestimmt viele interessiert - auch ich gestehe, dieses öfter zu googeln, wenn ich mal wieder den genauen Code vergessen habe.
Ich möchte in diesem Post zeigen, wie sich mittels C# eine Datei öffnen lässt und daraus gelesen oder hinein geschrieben werden kann.
Dafür gibt es etliche Möglichkeiten, ich zeige hier die wahrscheinlich einfachste und komfortabelste Methode, welche einen StreamReader bzw. StreamWriter benutzt.

Datei zum Lesen öffnen:
Hierzu benötigen wir eine Instanz der Klasse StreamReader. Sie initialisieren wir mit dem Pfad zur zu öffnenden Datei. Anschließend kann der Inhalt ausgelesen werden, z.B. zeilenweise (bei Textformaten) mittels ReadLine() oder komplett mittels ReadToEnd(). Wichtig ist auch das anschließende Schließen und damit verbundene Freigeben der Datei. Der folgende Code liest die Datei filename unter dem Pfad path zeilenweise aus und gibt die einzelnen Zeilen auf dem Bildschirm aus:

System.IO.StreamReader sr = new System.IO.StreamReader("path\filename");
string line = "";
while ((line = sr.ReadLine()) != null) // read until no more lines are available
{
    MessageBox.Show(line);
}
sr.Close();
Alternativ liest dieser Code den kompletten Inhalt in einem Schritt aus:

System.IO.StreamReader sr = new System.IO.StreamReader("path\filename");
MessageBox.Show(sr.ReadToEnd());
sr.Close();

Datei zum Schreiben öffnen:
Dieser Vorgang kann analog umgesetzt werden, nur mit einer Instanz der Klasse StreamWriter. Wir übergeben dieser ebenfalls im Konstruktor den Dateipfad und -namen, sowie optional einen Boolean Parameter, welcher angibt, ob die Datei ergänzt werden soll, falls sie schon vorhanden ist. Heißt: Wenn die Datei bereits existiert und wir übergeben true, werden die Daten, die das Programm im folgenden schreibt, an die Datei angehängt. Andernfalls wird die Datei ersetzt. Der Standardwert ist false. Ist die Datei nicht vorhanden, hat der Parameter keine Auswirkung, sie wird dann neu angelegt.
Der folgende Code öffnet die Datei filename in path und hängt an diese, falls vorhanden, die Zeile "test" an:

System.IO.StreamWriter sw = new System.IO.StreamWriter("path\filename");
sw.WriteLine("test");
sw.Close();

Abschließend möchte ich noch die Dialoge OpenFileDialog und SaveFileDialog vorstellen. Diese haben nichts mit dem tatsächlichen Öffnen- oder Speichervorgang zu tun, stellen aber die gewohnten Windows Dialoge zum Öffnen / Speichern von Dateien zur Verfügung, in welchen die jeweilige Datei ausgewählt werden kann.
Das folgende Beispiel zeigt einen Dialog zum Öffnen an, falls der Benutzer eine Datei auswählt und mit Klick auf OK bestätigt, öffnet das Programm mit obiger Methode diese:

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName);
    MessageBox.Show(sr.ReadToEnd());
    sr.Close();
}

Zum Schreiben kann man genauso vorgehen, oder z.B. etwas passender einen SaveFileDialog verwenden.

1 Kommentar:

  1. Bei Dateioperationen bietet es sich an, den Reader/Writer mit der using-Schreibweise zu benutzen. Ansonsten kann es bei erneuten Zugriffen unter Unständen (Garbage Collector hat seine Arbeit noch nicht getan) zu Problemen kommen.

    using(System.IO.StreamReader sr = new System.IO.StreamReader("path\filename"))
    {
    // sr.ReadLine() oder ähnliches
    // Operationen etc
    }
    Nach dem Verlassen des geschweiften Blockes wird das Object zeitnah disposed.

    AntwortenLöschen