Strona główna » Kursy » Kurs C# » Odczytywanie Pliku
 

Odczytywanie Pliku

· Odczyt · Zapis ·

Wstęp

Przechowywanie danych w plikach pozwala program zapisać preferencje użytkownika jak również na przeniesienie informacji pomiędzy urządzeniami. W tym artykule zostanie wyjaśnione jak taki plik można odczytać w języku C#.

Implementacja

Założenia

Przypuśćmy, że posiadamy na dysku zapisany poniższy plik tekstowy:

  1. 123
  2. 32
  3. 1

Plik będzie się znajdował w tym samym folderze co skompilowany program. Taki plik można utworzyć przy pomocy dowolnego edytora tekstu.

Proste Odczytywanie

W celu odczytania danych z pliku należy do programu dołączyć przestrzeń System.IO, która odpowiada między innymi za dostarczenie funkcjonalności zapisu / odczytu danych. Najprostszym sposobem odczytu danych z pliku jest wykorzystanie metody ReadAllText(), która przyjmuje jeden argument - ścieżkę dostępu do pliku. Wynikiem jej działania jest zwrócenie zawartości pliku w postaci ciągu znaków tj. typu string.

  1. try {
  2.   string plik = File.ReadAllText("test.txt");
  3.   Console.WriteLine("Zawartość pliku to:\n{0}", plik);
  4. } catch (Exception ex) {
  5.   Console.WriteLine(ex.Message);
  6. }

Należy oczywiście pamiętać, że odczytywany plik może nie istnieć. Wtedy zostanie zgłoszony wyjątek, który należy obsłużyć. W przeciwnym razie program zakończy działanie po wyświetleniu błędu. Zaletą tego rozwiązania jest bardzo wygodne użycie, ale wadą jest to, że program wstrzymuje działanie dopóki nie zostanie załadowany cały plik do pamięci. W przypadku większych plików może to zawiesić działanie programu.

Po uruchomieniu programu na konsole zostanie wypisane:

  1. Zawartość pliku to:123321

Linijka Po Linijce

Inny sposobem na odczytywanie danych z pliku jest analogiczny do tego znanego z wczytywania danych z konsoli - każda linijka jest odczytywana oddzielnie. Wtedy możliwe jest wykonanie na każdej danej jakieś konkretnej operacji np. wypisanie tekstu, albo odczytyanie zapisanej liczby. Wymaga to jednak wykorzystania innego narzędzia, aby otworzyć w ten sposób plik.

Teraz zostanie wykorzystany tzw. strumień. Strumienie dotyczą nie tylko plików, ale również przesyłania innych informacji. W tym przypadku użyta klasa nazywa się StreamReader. Pozwala ona uzyskać dostęp do pliku. Tym jednak razem dane można wczytywać linijka po linijce i sprawdzić czy dotarliśmy na koniec pliku. Oto przykładowe zastosowanie:

  1. try {
  2.   string bufor;
  3.   StreamReader file = new StreamReader("test.txt");
  4.   while ((bufor = file.ReadLine()) != null)
  5.     Console.WriteLine(bufor);
  6.   file.Close();
  7. } catch (Exception ex) {
  8.   Console.WriteLine(ex.Message);
  9. }

(2.) Przygotuj bufor pod odczytywaną linijkę, a następnie (3.) otwórz strumień do danych zapisanych w pliku. Następnie (4.) wczytuj dane tak długo, aż jest co wczytywać, a każdą wczytaną linijkę (5.) wypisz na konsole. Możliwe jest w tym przypadku np. odczytanie liczby zapisanej w linijce, a następnie przeprowadzenie obliczeń. Na koniec (6.) bardzo ważne jest, aby zamknąć strumień, ponieważ inne programy nie będą mogły uzyskać dostępu do tego pliku.

Podsumowanie

Wczytywanie pliku to bardzo wygodne narzędzie, które pozwala załadować do programu bardzo duże ilości danych, których podawanie przez konsolę byłoby bardzo niewygodne. W zależności od potrzeb możliwe jest użycie różnych metod wczytywania i każde z nich ma swoją zalete.

Zadania

Zadanie 1

Napisz program, który odczyta plik tekstowy podany przez użytkownika, a następnie odczyta wszystkie liczby, które zostały w nim zapisane. Program powinien wypisać na ekran sumę wszystkich odczytanych liczb. Można założyć, że wprowadzone dane są poprawne i plik istnieje.

Przykładowo dla pliku:

  1. 123
  2. 32
  3. 1

Program powinien wypisać:

  1. 156