C# Language
Datei- und Stream-E / A
Suche…
Einführung
Verwaltet Dateien.
Syntax
-
new System.IO.StreamWriter(string path)
-
new System.IO.StreamWriter(string path, bool append)
-
System.IO.StreamWriter.WriteLine(string text)
-
System.IO.StreamWriter.WriteAsync(string text)
-
System.IO.Stream.Close()
-
System.IO.File.ReadAllText(string path)
-
System.IO.File.ReadAllLines(string path)
-
System.IO.File.ReadLines(string path)
-
System.IO.File.WriteAllText(string path, string text)
-
System.IO.File.WriteAllLines(string path, IEnumerable<string> contents)
-
System.IO.File.Copy(string source, string dest)
-
System.IO.File.Create(string path)
-
System.IO.File.Delete(string path)
-
System.IO.File.Move(string source, string dest)
-
System.IO.Directory.GetFiles(string path)
Parameter
Parameter | Einzelheiten |
---|---|
Pfad | Der Speicherort der Datei. |
anhängen | Wenn die Datei vorhanden ist, fügt true dem Ende der Datei Daten hinzu (Anfügen), überschreibt die Datei die Datei. |
Text | Text, der geschrieben oder gespeichert werden soll. |
Inhalt | Eine Sammlung von zu schreibenden Strings. |
Quelle | Der Speicherort der Datei, die Sie verwenden möchten. |
dest | Der Speicherort, an den eine Datei gehen soll. |
Bemerkungen
- Stellen Sie immer sicher, dass
Stream
Objekte geschlossen werden. Dies kann mit einemusing
Block wie oben gezeigt geschehen oder durch manuelles Aufrufen vonmyStream.Close()
. - Stellen Sie sicher, dass der aktuelle Benutzer über die erforderlichen Berechtigungen für den Pfad verfügt, den Sie zum Erstellen der Datei versuchen.
- Verbatim-Zeichenfolgen sollten verwendet werden, wenn eine
@"C:\MyFolder\MyFile.txt"
Schrägstrichen deklariert wird:@"C:\MyFolder\MyFile.txt"
Lesen aus einer Datei mithilfe der System.IO.File-Klasse
Sie können die Funktion System.IO.File.ReadAllText verwenden, um den gesamten Inhalt einer Datei in eine Zeichenfolge zu lesen.
string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");
Mit der Funktion System.IO.File.ReadAllLines können Sie eine Datei auch als Zeilenarray lesen :
string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");
Schreiben von Zeilen in eine Datei mithilfe der System.IO.StreamWriter-Klasse
Die System.IO.StreamWriter- Klasse:
Implementiert einen TextWriter zum Schreiben von Zeichen in einen Stream in einer bestimmten Kodierung.
Mit der WriteLine
Methode können Sie Inhalt Zeile für Zeile in eine Datei schreiben.
Beachten Sie die Verwendung des Schlüsselworts using
, das dafür sorgt, dass das StreamWriter-Objekt gelöscht wird, sobald es den Gültigkeitsbereich verlässt und die Datei geschlossen wird.
string[] lines = { "My first string", "My second string", "and even a third string" };
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt"))
{
foreach (string line in lines)
{
sw.WriteLine(line);
}
}
Beachten Sie, dass der Stream einen zweiten empfangen kann bool
Parameter in seinem Konstruktor zu ermöglichen Append
in eine Datei statt die Datei überschreibt:
bool appendExistingFile = true;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt", appendExistingFile ))
{
sw.WriteLine("This line will be appended to the existing file");
}
Schreiben in eine Datei mithilfe der System.IO.File-Klasse
Sie können die Funktion System.IO.File.WriteAllText verwenden, um eine Zeichenfolge in eine Datei zu schreiben.
string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);
Sie können auch die Funktion System.IO.File.WriteAllLines verwenden, die als zweiten Parameter eine IEnumerable<String>
empfängt (im Gegensatz zu einer einzelnen Zeichenfolge im vorherigen Beispiel). Dadurch können Sie Inhalte aus einem Zeilenfeld schreiben.
string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);
Faules Lesen einer Datei zeilenweise über ein IEnumerable
Wenn Sie mit großen Dateien arbeiten, können Sie die System.IO.File.ReadLines
Methode verwenden, um alle Zeilen aus einer Datei in einen IEnumerable<string>
zu lesen. Dies ist ähnlich wie System.IO.File.ReadAllLines
, nur dass die gesamte Datei nicht gleichzeitig in den Arbeitsspeicher geladen wird, was die Arbeit mit großen Dateien effizienter macht.
IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);
Der zweite Parameter von File.ReadLines ist optional. Sie können es verwenden, wenn Sie die Kodierung angeben müssen.
Es ist wichtig zu ToArray
, dass beim Aufruf von ToArray
, ToList
oder einer ähnlichen Funktion alle Zeilen gleichzeitig geladen werden müssen, was bedeutet, dass der Nutzen der Verwendung von ReadLines
aufgehoben wird. Bei Verwendung dieser Methode IEnumerable
, über IEnumerable
mithilfe einer foreach
Schleife oder LINQ aufzählen.
Erstelle Datei
Statische Dateiklasse
Mithilfe der Create
Methode der statischen Klasse File
können wir Dateien erstellen. Die Methode erstellt die Datei unter dem angegebenen Pfad. Gleichzeitig öffnet sie die Datei und gibt uns den FileStream
der Datei. Stellen Sie sicher, dass Sie die Datei schließen, nachdem Sie damit fertig sind.
ex1:
var fileStream1 = File.Create("samplePath");
/// you can write to the fileStream1
fileStream1.Close();
ex2:
using(var fileStream1 = File.Create("samplePath"))
{
/// you can write to the fileStream1
}
ex3:
File.Create("samplePath").Close();
FileStream-Klasse
Es gibt viele Überladungen dieses Klassenkonstruktors, die hier eigentlich gut dokumentiert sind . Das folgende Beispiel ist für dasjenige, das die am häufigsten verwendeten Funktionalitäten dieser Klasse abdeckt.
var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
Über diese Links können Sie die Enums für FileMode , FileAccess und FileShare überprüfen. Was sie im Grunde bedeuten, ist wie folgt:
FileMode: Antworten "Soll Datei erstellt werden? Geöffnet? Anlegen, wenn nicht vorhanden, dann geöffnet?" irgendwie Fragen.
FileAccess: Antworten "Soll ich die Datei lesen, in die Datei schreiben oder beides?" irgendwie Fragen.
FileShare: Antworten "Sollten andere Benutzer die Datei lesen, schreiben usw. können, während ich sie gleichzeitig verwende?" irgendwie Fragen.
Datei kopieren
Statische Dateiklasse
File
statische Dateiklasse kann für diesen Zweck problemlos verwendet werden.
File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Anmerkung: Bei dieser Methode wird die Datei kopiert, dh sie wird aus der Quelle gelesen und dann in den Zielpfad geschrieben. Dies ist ein Ressourcenverbrauch, der relativ viel Zeit in Bezug auf die Dateigröße benötigt. Wenn Sie keine Threads verwenden, kann das Programm einfrieren.
Datei bewegen
Statische Dateiklasse
Die statische Dateiklasse kann leicht für diesen Zweck verwendet werden.
File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");
Anmerkung1: Ändert nur den Index der Datei (wenn die Datei auf demselben Volume verschoben wird). Dieser Vorgang benötigt keine relative Zeit zur Dateigröße.
Anmerkung2: Eine vorhandene Datei kann nicht im Zielpfad überschrieben werden.
Datei löschen
string path = @"c:\path\to\file.txt";
File.Delete(path);
Während Delete
keine Ausnahme Delete
, wenn die Datei nicht vorhanden ist, wird eine Ausnahme ausgelöst, z. B. wenn der angegebene Pfad ungültig ist oder der Aufrufer nicht über die erforderlichen Berechtigungen verfügt. Sie sollten Aufrufe innerhalb von try-catch-Block immer in Delete
einschließen und alle erwarteten Ausnahmen behandeln. Im Falle möglicher Wettkampfbedingungen, umschließen Sie die Logik in der Lock-Anweisung .
Dateien und Verzeichnisse
Holen Sie sich alle Dateien im Verzeichnis
var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);
Gibt ein Array von FileInfo
, das alle Dateien im angegebenen Verzeichnis darstellt.
Holen Sie sich Dateien mit bestimmten Erweiterungen
var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);
Gibt ein Array von FileInfo
, das alle Dateien im angegebenen Verzeichnis mit der angegebenen Erweiterung darstellt.
Async schreibt mit StreamWriter Text in eine Datei
// filename is a string with the full path
// true is to append
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, true))
{
// Can write either a string or char array
await file.WriteAsync(text);
}