Operacje we/wy na plikach

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3249 razy

Wstęp

Wszystkie niezbędne metody i klasy związane z zapisem i odczytem danych z pliku znajdują się w przestrzeni nazw:

using System.IO

Oczywiście zapis i odczyt może odbywać się binarnie lub tekstowo.

Sprawdzanie, czy plik istnieje metodą System.IO.File.Exists

W przestrzeni nazw System.IO.File zapisano wiele przydatnych metod statycznych, wśród których znajduje się metoda System.IO.File.Exists. Oto sposób jej wykorzystania w celu sprawdzenia, czy dany plik już istnieje:

if (System.IO.File.Exists("file.txt")) { Console.WriteLine("Istnieje!"); }

Zapis danych tekstowych za pomocą klasy System.IO.StreamWriter

Klasa System.IO.StreamWriter została stworzona tylko i wyłącznie w celu odczytywania danych, nie można tutaj więc ustawić opcji odczyt + zapis jednocześnie. Oto sposób zapisu danych do pliku tekstowego za pomocą tej klasy:

var file = new System.IO.StreamWriter("file.txt", false, System.Text.Encoding.UTF8); // tworzenie pliku file.txt, false - oznacza bez dopisywania, System.Text.Encoding.UTF8 - kodowanie utf8 file.WriteLine("Coś tam do zapisania"); // zapisuje tekst i dodaje na jego końcu znak przejścia do nowej linii file.Write("tekst do zapisanie"); // zapisuje tekst bez dodawania znaku końca linii file.Close(); // po zakończeniu zapisywania trzeba grzecznie zamknąć plik

Odczyt danych tekstowych za pomocą klasy System.IO.StreamReader

Klasa System.IO.StreamReader została stworzona tylko i wyłącznie w celu odczytywania danych, nie można tutaj więc ustawić opcji odczyt + zapis jednocześnie. Oto sposób zapisu danych do pliku tekstowego za pomocą tej klasy:

var file2 = new System.IO.StreamReader("file.txt", System.Text.Encoding.UTF8); Console.WriteLine(file2.ReadLine()); // wczytywanie pojedynczej linii tekstu i wyświetlania na ekranie Console.WriteLine(file2.ReadToEnd()); // wczytywanie od bieżącej pozycji do końca pliku i wyświetlanie w konsoli file2.Close();

Wczytywanie całego pliku linijka po linijce:

var file2 = new System.IO.StreamReader("file.txt", System.Text.Encoding.UTF8); string text; do{ text = file2.ReadLine(); // wczytywanie linii tekstu if(text != null) Console.WriteLine(text); // wyświetlanie }while(text != null); // dopuki text nie jest równy null powtarzaj tą czynność file2.Close();

Wczytywanie danych tekstowych za pomocą metod statycznych zawartych w System.IO.File

Za pomocą metody statycznej System.IO.File.ReadAllText można wczytać cały tekst zawarty w pliku:

var path = "file.txt"; if (System.IO.File.Exists(path)) { string text = System.IO.File.ReadAllText(path, System.Text.Encoding.UTF8); } Console.WriteLine(text);

Za pomocą metody statycznej System.IO.File.ReadAllLines można wczytać tablicę linii tekstu, jakie ten plik zawiera:

var path = "file.txt"; if (System.IO.File.Exists(path)) { string[] text; text = System.IO.File.ReadAllLines(path, System.Text.Encoding.UTF8); foreach (string t in text) Console.WriteLine(t); }

Zapisywanie danych tekstowych za pomocą metod statycznych zawartych w System.IO.File

Dzięki metodzie statycznej System.IO.File.WriteAllText można zapisywać tekst zawarty w zmiennej tekstowej do pliku:

var path = "file.txt"; var text = "Jakiś tam tekst do zapisania\r\nI jeszcze jedna linijka tekstu"; if (System.IO.File.Exists(path)) { System.IO.File.WriteAllText(path, text, System.Text.Encoding.UTF8); }

Natomiast metoda statyczna System.IO.File.WriteAllLines umożliwia zapisywanie linii tekstu zapisanych w tablicy:

var path = "file.txt"; string[] text_table = { "Jakiś tekst do zapisania", "w pliku" }; if (System.IO.File.Exists(path)) { System.IO.File.WriteAllLines(path, text_table, System.Text.Encoding.UTF8); }

Zapis i odczyt danych bajtowych za pomocą klasy System.IO.FileStream

Wczytywanie danych bitowych:

var path = "file.txt"; if (System.IO.File.Exists(path)) { var fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read); var b = new byte[fs.Length]; fs.Read(b, 0, (int)fs.Length); fs.Close(); string text = System.Text.Encoding.UTF8.GetString(b); Console.WriteLine(text); }

Zapisywanie danych bitowych:

var path = "file.txt"; if (System.IO.File.Exists(path)) { var fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Write); byte[] b = System.Text.Encoding.UTF8.GetBytes("Jakiś tekst do zapisania"); fs.Write(b, 0, (int)b.Length); fs.Close(); }

Wczytywanie danych bitowych za pomocą metody statycznej System.IO.File.ReadAllBytes

Oto, jak można wczytać cały blok danych bajtowych:

var path = "file.txt"; if (System.IO.File.Exists(path)) { byte[] b = System.IO.File.ReadAllBytes(path); string text = System.Text.Encoding.UTF8.GetString(b); Console.WriteLine(text); }

Zapisywanie danych bitowych za pomocą metody statycznej System.IO.File.WriteAllBytes

Zapisywanie danych bajtowych w pliku:

if (System.IO.File.Exists(path)) { byte[] b = System.Text.Encoding.UTF8.GetBytes("Jakiś tekst do zapisania"); System.IO.File.WriteAllBytes(path, b); }
Propozycje książek