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 einem using Block wie oben gezeigt geschehen oder durch manuelles Aufrufen von myStream.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);
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow