C# Language
Plik i strumień we / wy
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ć zausing
blokumyStream.Close()
jak pokazano powyżej, lub ręcznie wywołującmyStream.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);
}