Strona główna » Kursy » Kurs C# » Zapisywanie do pliku
 

Zapisywanie do pliku

· Odczyt · Zapis ·

Wstęp

Zapis danych do pliku pozwala przechowywać np. ustawienia konfiguracyjne. Jest bardzo podobny do wypisywania danych na konsolę. W tym jednak przypadku dane są przesyłane w inne miejsce. W tym artykule zostaną przedstawione dwa sposoby na wczytanie zawartości dowolnego pliku.

Implementacja

Założenia

Chcemy na dysku zapisać następujący plik w tym samym folderze w którym znajduje się program:

  1. A 1
  2. B 12
  3. C 123

Szybki zapis

W celu zapisania danych na dysku należy mieć określony tekst do zapisu oraz ścieżkę dostępu. Oto przykładowy kod, który zapisze określony wcześniej tekst do pliku test.txt. Zapisywany w ten sposób plik można odczytać innym edytorem tekstu.

  1.   string tekst = "A 1\r\nB 12\r\nC 123";
  2.   File.WriteAllText("test.txt", tekst);

(1.) W zadeklarowanym tekście do zapisu zostały użyte znaki specjalne "\r\n", które symbolizują znak nowej linii. (2.) Ścieżka zapisu zawiera tylko nazwę pliku i rozszerzenie - w ten sposób plik zapisze się tam gdzie program.

Elastyczny zapis

Przypuśćmy, że każda linijka tekstu jest przechowywana/generowana oddzielnie. Wtedy nie opłaca się dodatkowo tworzyć nowy łańcuch znaków, a następnie go zapisywać. Lepiej byłoby pobierać kolejny fragment pliku i od razu zapisywać go na dysk. Pozwoli to zwiększyć wydajność wykorzystania sprzętu.

Tego typu elastyczne zapisywanie danych do wymaga użycia strumienia danych dostępnego jako klasa StreamWriter. Na takim obiekcie można korzystać z dwóch metod identycznych z konsolowym odpowiednikiem Write() oraz WriteLine().

  1.   try {
  2.     StreamWriter plik = new StreamWriter("test.txt");
  3.     plik.WriteLine("A 1");
  4.     plik.WriteLine("B 12");
  5.     plik.Write("C 123");
  6.     plik.Close();
  7.   } catch (Exception ex) {
  8.     Console.WriteLine(ex.Message);
  9.   }

Kod został umieszczony wewnątrz klauzuli try .. catch na wypadek wystąpienia wyjątku. (2.) Otwórz plik do zapisu, a następnie: (3. - 5.) zapisz kolejne linijki tekstu. Ostatnie dane zostały zapisane przy pomocy funkcji Write(), aby nie tworzyć na końcu pliku dodatkowego znaku nowej linii. Po zapisaniu wszystkich danych należy pamiętać o (6.) zamknięciu dostepu do pliku.

Podsumowanie

Każdy ze sposobów zapisu ma swoje wady jak i zalety. Wszystko zależy od przeznaczenia programu oraz sposobu przechowywania danych. Zwykle jednak korzysta się z drugiej metody, która zapewnia zdecydowanie większą elastyczność polegającą na możliwości zapisu danych do pliku tekstowego.

Zadania

Zadanie 1

Napisz program, który wczyta od użytkownika liczbyz konsoli do zapisania do pliku tekstowego. Wczytywanie kolejnych liczb powinno się zapisać w momencie wczytania liczby 0. Na końcu pliku powinna znajdować się suma wszystkich wczytanych liczb. Przetestuj działanie programu.

Przykładowo jeśli użytkownik będzie wprowadzał następujące liczby na konsoli:

  1. 3
  2. 2
  3. 1
  4. 0

Wtedy program powiniene zapisać do pliku następujące dane:

  1. 3
  2. 2
  3. 1
  4. Suma: 6