Szukaj…


Wprowadzenie

Zarządza plikami.

Składnia

  • 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)

Parametry

Parametr Detale
ścieżka Lokalizacja pliku.
dodać Jeśli plik istnieje, true doda dane na końcu pliku (dopisz), false zastąpi plik.
tekst Tekst do zapisania lub zapisania.
zawartość Zbiór ciągów do napisania.
źródło Lokalizacja pliku, którego chcesz użyć.
dest Lokalizacja, do której chcesz przejść plik.

Uwagi

  • Zawsze pamiętaj o zamknięciu obiektów Stream . Można to zrobić za using bloku myStream.Close() jak pokazano powyżej, lub ręcznie wywołując myStream.Close() .
  • Upewnij się, że bieżący użytkownik ma niezbędne uprawnienia do ścieżki, którą próbujesz utworzyć plik.
  • Podczas deklarowania ciągu ścieżki, który zawiera ukośniki odwrotne, należy używać ciągów @"C:\MyFolder\MyFile.txt" , takich jak: @"C:\MyFolder\MyFile.txt"

Odczytywanie z pliku przy użyciu klasy System.IO.File

Możesz użyć funkcji System.IO.File.ReadAllText, aby odczytać całą zawartość pliku w łańcuch.

string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");

Możesz także odczytać plik jako tablicę wierszy za pomocą funkcji System.IO.File.ReadAllLines :

string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");

Zapisywanie wierszy do pliku za pomocą klasy System.IO.StreamWriter

Klasa System.IO.StreamWriter :

Implementuje TextWriter do zapisywania znaków w strumieniu w określonym kodowaniu.

Za pomocą metody WriteLine można zapisywać zawartość wiersz po wierszu do pliku.

Zwróć uwagę na using słowa kluczowego using które zapewnia, że obiekt StreamWriter jest usuwany, gdy tylko znajdzie się poza zasięgiem, a tym samym plik zostanie zamknięty.

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

Zauważ, że StreamWriter może otrzymać drugi parametr bool w swoim konstruktorze, pozwalając na Append do pliku zamiast nadpisywania pliku:

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

Zapis do pliku przy użyciu klasy System.IO.File

Możesz użyć funkcji System.IO.File.WriteAllText, aby zapisać ciąg do pliku.

string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);

Możesz także użyć funkcji System.IO.File.WriteAllLines, która otrzymuje IEnumerable<String> jako drugi parametr (w przeciwieństwie do pojedynczego ciągu w poprzednim przykładzie). To pozwala pisać zawartość z szeregu linii.

string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);

Leniwie czyta plik linia po linii za pomocą IEnumerable

Podczas pracy z dużymi plikami można użyć metody System.IO.File.ReadLines , aby odczytać wszystkie linie z pliku do IEnumerable<string> . Jest to podobne do System.IO.File.ReadAllLines , z tym wyjątkiem, że nie ładuje jednocześnie całego pliku do pamięci, co czyni go bardziej wydajnym podczas pracy z dużymi plikami.

IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);

Drugi parametr File.ReadLines jest opcjonalny. Możesz go użyć, gdy jest to wymagane do określenia kodowania.

Ważne jest, aby pamiętać, że wywołanie ToArray , ToList lub innej podobnej funkcji zmusi wszystkie linie do załadowania na raz, co oznacza, że korzyść z zastosowania ReadLines zostanie anulowana. Najlepiej wyliczyć za pomocą IEnumerable za pomocą pętli foreach lub LINQ, jeśli używasz tej metody.

Utwórz plik

Plik statyczna klasa

Za pomocą metody Create klasy File static możemy tworzyć pliki. Metoda tworzy plik pod podaną ścieżką, jednocześnie otwiera plik i przekazuje nam FileStream pliku. Pamiętaj, aby zamknąć plik po zakończeniu.

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

Klasa FileStream

Istnieje wiele przeciążeń tego konstruktora klas, który jest tutaj dobrze udokumentowany. Poniższy przykład dotyczy tego, który obejmuje najczęściej używane funkcje tej klasy.

var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);

Można sprawdzić teksty stałe dla FileMode , FileAccess i fileshare z tych linków. Zasadniczo oznaczają one:

FileMode: Odpowiedzi „Czy plik należy utworzyć? Otworzyć? Utworzyć, jeśli nie istnieje, a następnie otworzyć?” trochę pytań.

FileAccess: Odpowiedzi „Czy powinienem być w stanie odczytać plik, zapisać plik lub jedno i drugie?” trochę pytań.

FileShare: Odpowiedzi „Czy inni użytkownicy powinni móc czytać, zapisywać itp. Do pliku, gdy jednocześnie go używam?” trochę pytań.

Skopiować plik

Plik statyczna klasa

File tym celu można łatwo wykorzystać klasę statyczną File .

File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

Uwaga: Za pomocą tej metody plik jest kopiowany, co oznacza, że zostanie odczytany ze źródła, a następnie zapisany na ścieżce docelowej. Jest to proces pochłaniający zasoby, zajęłoby to względnie dużo czasu w stosunku do rozmiaru pliku i może spowodować zawieszenie się programu, jeśli nie używasz wątków.

Przenieś plik

Plik statyczna klasa

W tym celu można łatwo użyć klasy statycznej pliku.

File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

Uwaga 1: Zmienia tylko indeks pliku (jeśli plik jest przenoszony w tym samym woluminie). Ta operacja nie zajmuje czasu względnego do rozmiaru pliku.

Uwaga 2: Nie można przesłonić istniejącego pliku na ścieżce docelowej.

Usunąć plik

string path = @"c:\path\to\file.txt";
File.Delete(path);

Chociaż Delete nie zgłasza wyjątku, jeśli plik nie istnieje, zgłasza wyjątek, np. Jeśli określona ścieżka jest niepoprawna lub osoba dzwoniąca nie ma wymaganych uprawnień. Zawsze powinieneś zawijać wywołania Delete wewnątrz bloku try-catch i obsługiwać wszystkie oczekiwane wyjątki. W przypadku możliwych warunków wyścigu, zawiń logikę w instrukcji blokady .

Pliki i katalogi

Pobierz wszystkie pliki z katalogu

 var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);

Zwraca tablicę FileInfo reprezentującą wszystkie pliki w określonym katalogu.

Pobierz pliki z określonym rozszerzeniem

 var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);

Zwraca tablicę FileInfo reprezentującą wszystkie pliki w określonym katalogu z określonym rozszerzeniem.

Asynchronicznie napisz tekst do pliku za pomocą StreamWriter

// 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow