StreamReader
Jak działa:
StreamReader
jest bardziej niskopoziomową klasą, która pozwala na czytanie plików linia po linii lub znak po znaku. Daje większą kontrolę nad tym, jak dane są czytane z pliku, ale wymaga od programisty więcej uwagi, np. zamykania strumienia po zakończeniu.
Zalety:
- Pozwala na przetwarzanie plików stopniowo, np. linia po linii.
- Umożliwia pracę z bardzo dużymi plikami, ponieważ nie wczytuje całego pliku naraz do pamięci.
- Większa elastyczność w czytaniu danych.
using (StreamReader sr = new StreamReader("plik.txt"))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
W tym przykładzie używamy StreamReader
do czytania pliku linia po linii w pętli while
. Każda linia jest odczytywana, dopóki nie napotkamy końca pliku (null
). using
zapewnia, że strumień jest automatycznie zamykany po zakończeniu operacji.
Przykład 1: Dane w jednej linii, rozdzielone średnikami
using (StreamReader sr = new StreamReader("plik.txt"))
{
string line = sr.ReadToEnd(); // Odczytujemy cały plik naraz
string[] values = line.Split(';'); // Dzielimy dane na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
}
Przykład 2: Dane w nowej linii, każda linia oddzielona średnikami
using (StreamReader sr = new StreamReader("plik.txt"))
{
string line;
while ((line = sr.ReadLine()) != null) // Odczytujemy linia po linii
{
string[] values = line.Split(';'); // Dzielimy każdą linię na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
}
}
Zastosowanie:
- Używany, gdy plik jest zbyt duży, aby załadować go w całości do pamięci.
- Gdy potrzebujesz precyzyjnej kontroli nad przetwarzaniem pliku, np. linia po linii.
ReadAllLines
Jak działa:
File.ReadAllLines
odczytuje cały plik i zwraca go jako tablicę ciągów (string[]
), gdzie każdy element tablicy to jedna linia z pliku.
Zalety:
- Jest szybki i prosty do użycia.
- Działa dobrze dla małych i średnich plików.
- Wygodne, gdy potrzebujesz od razu wszystkie linie pliku.
string[] lines = File.ReadAllLines("plik.txt");
foreach (string line in lines)
{
Console.WriteLine(line);
}
- Wyjaśnienie:
ReadAllLines
wczytuje cały plik do tablicylines
, a potem każda linia jest wyświetlana w pętliforeach
.
Przykład 1: Dane w jednej linii, rozdzielone średnikami
string[] lines = File.ReadAllLines("plik.txt");
if (lines.Length > 0) // Sprawdzamy, czy plik nie jest pusty
{
string[] values = lines[0].Split(';'); // Dzielimy tylko pierwszą linię na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
}
Przykład 2: Dane w nowej linii, każda linia oddzielona średnikami
string[] lines = File.ReadAllLines("plik.txt");
foreach (string line in lines)
{
string[] values = line.Split(';'); // Dzielimy każdą linię na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
}
Zastosowanie:
- Używane, gdy plik jest stosunkowo mały i możesz bezpiecznie załadować cały jego zawartość do pamięci.
- Idealne do przetwarzania linii jako tablicy w całości.
ReadAllText
Jak działa:
File.ReadAllText
odczytuje cały plik i zwraca go jako jeden ciąg tekstowy (string
). Oznacza to, że plik jest interpretowany jako ciąg znaków, bez dzielenia na linie.
Zalety:
- Prostota, gdy potrzebujesz całej zawartości pliku jako pojedynczego ciągu.
- Użyteczne, gdy chcesz przetworzyć plik w formie całego tekstu, a nie linia po linii.
string text = File.ReadAllText("plik.txt");
Console.WriteLine(text);
- Wyjaśnienie:
ReadAllText
odczytuje całą zawartość pliku do pojedynczej zmiennejtext
, a następnie wypisuje całość tekstu na konsolę.
Przykład 1: Dane w jednej linii, rozdzielone średnikami
string text = File.ReadAllText("plik.txt");
string[] values = text.Split(';'); // Dzielimy dane na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
Przykład 2: Dane w nowej linii, każda linia oddzielona średnikami
string text = File.ReadAllText("plik.txt");
string[] lines = text.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); // Dzielimy po znakach nowej linii
foreach (string line in lines)
{
string[] values = line.Split(';'); // Dzielimy każdą linię na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
}
Zastosowanie:
- Używane, gdy plik jest stosunkowo mały i potrzebujesz całą jego zawartość jako jeden ciąg tekstowy.
- Idealne do odczytywania plików tekstowych, takich jak dokumenty HTML, JSON, czy XML.
3. File.ReadLines
To wersja oszczędniejsza pamięciowo od ReadAllLines
. Zamiast wczytywać cały plik do pamięci naraz, ReadLines
zwraca enumerator (IEnumerable<string>
) i odczytuje plik linia po linii w miarę potrzeby (lazy loading).
foreach (string line in File.ReadLines("plik.txt"))
{
Console.WriteLine(line);
}
Przykład 1: Dane w jednej linii, rozdzielone średnikami
foreach (string line in File.ReadLines("plik.txt"))
{
string[] values = line.Split(';'); // Dzielimy linie na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
break; // Przerywamy pętlę, ponieważ jest tylko jedna linia
}
Przykład 2: Dane w nowej linii, każda linia oddzielona średnikami
foreach (string line in File.ReadLines("plik.txt"))
{
string[] values = line.Split(';'); // Dzielimy każdą linię na podstawie średników
foreach (string value in values)
{
Console.WriteLine(value.Trim()); // Wyświetlamy każdy element
}
}
Podsumowanie różnic:
Metoda | Co zwraca | Wczytuje linia po linii? | Zalecane dla dużych plików? | Komentarz |
---|---|---|---|---|
StreamReader | Linia po linii lub znak po znaku | Tak | Tak | Daje dużą elastyczność, ale wymaga więcej kodu. |
ReadAllLines | Tablicę ciągów (string[] ) | Nie, wczytuje całość od razu | Nie | Szybkie i proste do przetwarzania linii tekstu. |
File.ReadLines | Odczytuje plik linia po linii (lazy loading). | Tak | Tak | Duże pliki, przetwarzane linia po linii |
ReadAllText | Jeden ciąg (string ) | Nie | Nie | Odczytuje cały plik jako pojedynczy ciąg tekstowy. |