Inhaltsverzeichnis
Dateioperationen in C#
Schreiben in eine Datei
Um in eine Datei zu schreiben, kann der folgende Quelltext verwendet werden.
using System.IO; //... StreamWriter sw; sw = new StreamWriter("test.txt"); sw.WriteLine("Eine Zeile"); sw.Close();
Mit der using
-Anweisung werden Klassen für die Ein- und Ausgabe (IO = Input/Output) zur Verfügung gestellt.
Die Datei test.txt
landet hierbei direkt neben der EXE-Datei des Programms. Man kann einen vollständigen Pfad angeben. Hierbei muss vor den Anführungszeichen ein @-Symbol angegeben werden: @"C:\Users\Bakera\Desktop\test.txt"
.
Weitere Details stehen z.B. in Kapitel 12.5 von Visual C# 2012.
Speicherndialog
Komfortabler ist die Verwendung eines Speicherndialoges, in dem der Nutzer den Speicherort und Dateiname selbst festlegen kann.
Wir gehen von einem Fenster mit einem Button und folgenden Quelltext aus.
private void button1_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); DialogResult result = sfd.ShowDialog(); if(result == DialogResult.OK) { string sDatei = sfd.FileName; MessageBox.Show("Es wurde Datei " + sDatei + " gewählt"); } }
Nach einem Klick auf den Button erscheint das folgende Fenster und der Nutzer kann eine Datei auswählen.
Wenn der Dialog nicht abgebrochen wird, erscheint im Anschluss eine MessageBox
, die den Dateiname anzeigt.
Der SaveFileDialog
kann umfangreich konfiguriert werden. So kann z.B. die Auswahl der Dateien auf Textdateien beschränkt werden.
sfd.Filter ="Textdateien (*.txt)|*.txt"
Lesen einer Datei
Das Lesen einer Datei erfolgt fast wie das Schreiben in eine Datei. Statt dem StreamWriter
benutzen wir nun einen StreamReader
. Da wir nicht wissen, wann das Ende der Datei erreicht ist, müssen wir dies mit EndOfStream
in einer Schleife prüfen.
// StreamReader zum Lesen erstellen StreamReader datei = new StreamReader(@“C:\datei.csv“); // Solange noch Zeilen gelesen werden können... while( !datei.EndOfStream ) { // Zeile aus der Datei lesen string zeile = datei.ReadLine(); // etwas mit der Textzeile machen } // Datei schließen datei.Close();
Eine Datei kann auch byteweise eingelesen werden
FileStream stream = new FileStream(sDateiname, FileMode.Open); int einByte = stream.ReadByte(); while (einByte != -1) { byte b = (byte) einByte; // ... einByte = stream.ReadByte(); } stream.Close();