Zum Inhalt springen

Arbeiten mit .NET: Zugriff auf Dateien/ Textdateien/ Überblick

Aus Wikibooks

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();
        }
    }
}