Arbeiten mit .NET: Zugriff auf Dateien/ Textdateien/ Überblick
Für das schreiben von Dateien stellt .NET einen eigenen Namensraum (namespace) zur Verfügung, den System.IO
Schreiben/Lesen per File-Klasse
[Bearbeiten]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)
//Beachten 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
Schreiben/Lesen per StreamWriter/Reader
[Bearbeiten]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();
}
}
}
Schreiben/Lesen per FileStream
[Bearbeiten]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();
}
}
}