Operacje we/wy na plikach

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

Wstęp

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

Listing 1
  1. 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:

Listing 2
  1. if (System.IO.File.Exists("file.txt"))
  2. {
  3. Console.WriteLine("Istnieje!");
  4. }

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:

Listing 3
  1. 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
  2. file.WriteLine("Coś tam do zapisania"); // zapisuje tekst i dodaje na jego końcu znak przejścia do nowej linii
  3. file.Write("tekst do zapisanie"); // zapisuje tekst bez dodawania znaku końca linii
  4. 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:

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

Wczytywanie całego pliku linijka po linijce:

Listing 5
  1. var file2 = new System.IO.StreamReader("file.txt", System.Text.Encoding.UTF8);
  2. string text;
  3. do{
  4. text = file2.ReadLine(); // wczytywanie linii tekstu
  5. if(text != null)
  6. Console.WriteLine(text); // wyświetlanie
  7. }while(text != null); // dopuki text nie jest równy null powtarzaj tą czynność
  8. 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:

Listing 6
  1. var path = "file.txt";
  2. if (System.IO.File.Exists(path))
  3. {
  4. string text = System.IO.File.ReadAllText(path, System.Text.Encoding.UTF8);
  5. }
  6. Console.WriteLine(text);

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

Listing 7
  1. var path = "file.txt";
  2. if (System.IO.File.Exists(path))
  3. {
  4. string[] text;
  5. text = System.IO.File.ReadAllLines(path, System.Text.Encoding.UTF8);
  6. foreach (string t in text)
  7. Console.WriteLine(t);
  8. }

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:

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

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

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

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

Wczytywanie danych bitowych:

Listing 10
  1. var path = "file.txt";
  2. if (System.IO.File.Exists(path))
  3. {
  4. var fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
  5. var b = new byte[fs.Length];
  6. fs.Read(b, 0, (int)fs.Length);
  7. fs.Close();
  8. string text = System.Text.Encoding.UTF8.GetString(b);
  9. Console.WriteLine(text);
  10. }

Zapisywanie danych bitowych:

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

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

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

Listing 12
  1. var path = "file.txt";
  2. if (System.IO.File.Exists(path))
  3. {
  4. byte[] b = System.IO.File.ReadAllBytes(path);
  5. string text = System.Text.Encoding.UTF8.GetString(b);
  6. Console.WriteLine(text);
  7. }

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

Zapisywanie danych bajtowych w pliku:

Listing 13
  1. if (System.IO.File.Exists(path))
  2. {
  3. byte[] b = System.Text.Encoding.UTF8.GetBytes("Jakiś tekst do zapisania");
  4. System.IO.File.WriteAllBytes(path, b);
  5. }

Komentarze