Programmierkurs C-Sharp: DateienLesenSchreiben
Aus Wikibooks
Für das schreiben von Dateien stellt .NET einen eigenen Namensraum (namespace) zur Verfügung, den System.IO
[Bearbeiten] Schreiben/Lesen per File-Klasse
Die Klasse File bietet statische Methoden zum Erstellen, Kopieren, Löschen, Verschieben und Öffnen von Dateien.
Eine einfache Möglichkeit, string-Werte in Dateien zu schreiben, ist die Nutzung der Methode File.WriteAllText. Zum Lesen bedient man sich der Methode File.ReadAllText.
using System; using System.Collections.Generic; using System.Text; using System.IO; //Erforderlicher Namespace namespace Wiki { class Program { static void Main(string[] args) { //Einfachste Art einen String in eine neue Datei zu schreiben: //WriteAllText(Pfadangabe, Text) //Bachten Sie das @ vor der Pfadangabe File.WriteAllText(@"C:\test1.txt", "Sehr einfach"); //Einfache Art einen String aus einer Datei zu lesen: //ReadAllText(Pfadangabe) string text = File.ReadAllText(@"C:\test1.txt"); Console.WriteLine(text); //Nur dafür da, damit sich die Konsole nicht sofort schließt Console.Read(); } } }
Die Klasse File hat eine Vielzahl von Methoden für den einfachen Dateizugriff (Einzelheiten siehe MSDN), beispielsweise:
- ReadAllLines und WriteAllLines zum zeilenweisen Lesen und Schreiben einer Textdatei
- ReadAllBytes und WriteAllBytes zum Lesen und Schreiben einer Binärdatei
- Delete, Copy u.a. zum Bearbeiten einer Datei insgesamt
[Bearbeiten] Schreiben/Lesen per StreamWriter/Reader
StreamWriter unterstützt das Schreiben von verschiedenen Datentypen ohne komplizierte Umwandlung in Bytes.
using System; using System.Collections.Generic; using System.Text; using System.IO; //Erforderlicher Namespace namespace Wiki { class Program { static void Main(string[] args) { //Schreiben //new Streamwriter(Pfadangabe) StreamWriter sw = new StreamWriter(@"C:\test2.txt"); //Schreibt einzelne Zeilen in die Datei sw.WriteLine("Zeile 1"); sw.WriteLine("Zeile 2"); string text = "Dies ist ein String!"; //Schreibt Werte vieler Datentypen in die Datei //Überladungen für: Boolean, Char, Double, Int, String,... sw.Write(text); //Sehr wichtig!!! Damit wird der Stream geschlossen und die Daten in die Datei geschrieben sw.Close(); //Lesen //new Streamreader(Pfadangabe) StreamReader sr = new StreamReader(@"C:\test2.txt"); //Liest die gesamte Datei in den string test2 string test2 = sr.ReadToEnd(); sr.Close(); Console.WriteLine(test2); //Nur dafür da, damit sich die Konsole nicht sofort schließt Console.Read(); } } }
[Bearbeiten] Schreiben/Lesen per FileStream
FileStream unterstützt sowohl synchronen, als auch asynchronen Lese- und Schreibzugriff, bietet wahlfreien Zugriff auf eine Stelle innerhalb der Datei und weitere Dateibezogene Funktionalität. FileStream arbeitet, im Gegensatz zu StreamWriter/Reader, aber nur mit Bytes (ByteArray).
using System; using System.Collections.Generic; using System.Text; using System.IO; //Erforderlicher Namespace namespace Wiki { class Program { static void Main(string[] args) { //Für größere Datenmengen empfiehlt sich FileStream //Dieser Stream bringt zusätzlich Sicherheitsfunktionen mit //und erlaubt auch das mehrfache Schreiben in die Datei FileStream fs = new FileStream(@"C:\test3.txt", FileMode.Create, FileAccess.Write); string text = "C# sagt:"; //FileStream kann nur Daten im Byteformat schreiben (oder als ByteArray) //Umwandeln eines String in ein Bytearray byte[] bytes = Encoding.UTF8.GetBytes(text); //Write(ByteArray, Startposition, Länge); fs.Write(bytes, 0, bytes.Length); //Erneutes umwandeln und schreiben bytes = Encoding.UTF8.GetBytes(" Hallo Welt!"); fs.Write(bytes, 0, bytes.Length); //Sehr wichtig!!! Damit wird der Stream geschlossen und die Daten in die Datei geschrieben fs.Close(); //Lesen per FileStream FileStream fr = new FileStream(@"C:\test3.txt", FileMode.Open, FileAccess.Read); //erzeugen eines Buffers byte[] buffer = new byte[fr.Length]; fr.Read(buffer, 0, buffer.Length); fr.Close(); //Umwandlung byte-Array zu String string test3 = Encoding.UTF8.GetString(buffer); Console.WriteLine(test3); //Nur dafür da, damit sich die Konsole nicht sofort schließt Console.Read(); } } }