====== Dateioperationen in C# ====== ===== Schreiben in eine Datei ===== {{ :schule:prog:livecodekonsolestreamwriter.png?nolink|}} 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 [[http://openbook.rheinwerk-verlag.de/visual_csharp_2012/1997_12_005.html#dodtpb2003e06-cf60-4f3c-875b-4a7559147ac1|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. {{ :schule:prog:einbuttonfenster.png?nolink|}} 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. {{:schule:prog:savefiledialog.png?nolink|}} Wenn der Dialog nicht abgebrochen wird, erscheint im Anschluss eine ''MessageBox'', die den Dateiname anzeigt. {{:schule:prog:messageboxdateiname.png?nolink|}} 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();