cs

Operacje na strumieniach w języku C#.

Obsługa strumieni jest kluczowa w programowaniu, zwłaszcza do odczytu ustawień aplikacji z plików tekstowych (XML i .env), co pozwala na dynamiczną konfigurację bez zmiany kodu.

Do tworzenia uniwersalnych aplikacji pomocna jest klasa Path z modułu pathlib (Python), która automatycznie dostosowuje ścieżki do systemu operacyjnego, dzięki czemu kod może działać poprawnie na Windows (C:\path\to\file) i Linux/macOS (/path/to/file) mimo różnych symboli używanych do separacji parametrów ścieżki oraz wartości niektórych parametrów.

Klasa Stream jest abstrakcyjną klasą bazową dla wszystkich strumieni, które reprezentują sekwencję bajtów. Strumienie mogą służyć do operacji na plikach, urządzeniach wejścia/wyjścia, połączeniach sieciowych czy komunikacji między procesami. Stream izoluje programistę od szczegółów systemu operacyjnego i urządzeń bazowych, co oznacza, że ten sam kod może działać na różnych typach strumieni bez modyfikacji. Dzięki temu:

Popularne klasy pochodne Stream:

- Używana do pracy z plikami na dysku. Pozwala na odczyt i zapis danych w pliku. Jest jedną z najbardziej podstawowych klas strumieniowych do manipulowania plikami.

- Pozwala na przechowywanie danych w pamięci, traktując ją jako strumień bajtów. Użyteczna do szybkiej manipulacji danymi w pamięci. Idealna do operacji na danych tymczasowych, takich jak przetwarzanie obrazów, plików w pamięci lub operacje na bajtach bez potrzeby zapisywania ich na dysku.

- Używana do kompresji i dekompresji danych w formacie GZip.

- Używana do odczytu danych tekstowych z pliku lub strumienia, zapewniając wygodne metody do odczytu tekstu w różnych formatach (np. linie, całe pliki).

- Używana do zapisywania danych tekstowych do pliku lub strumienia. Zapewnia łatwy sposób na zapisanie tekstu w formacie znakowym (np. linie tekstu).

Podstawowe metody Stream

- odczyt

- zapis

- ustawienie bieżącej pozycji tego strumienia na daną wartość.

- używana do zamknięcia strumienia i zwolnienia zasobów, które zostały przypisane do tego strumienia (Dispose - metoda zwalniajaca zasoby).

Właściwości Stream

– czy można odczytywać dane

– czy można zapisywać dane

– czy można przewijać strumień

– długość strumienia

– aktualna pozycja kursora w strumieniu

Path

Klasa Path w C# znajduje się w przestrzeni nazw System.IO i oferuje metody do manipulowania ścieżkami plików i katalogów. Jest to klasa statyczna, która wykonuje operacje na łańcuchach znaków reprezentujących ścieżki, takie jak łączenie ścieżek, sprawdzanie rozszerzeń plików, uzyskiwanie katalogów i rozszerzeń. Działa w sposób międzyplatformowy, dostosowując się do różnych systemów operacyjnych, jak Windows czy Linux. Większość metod klasy Path nie sprawdza, czy plik lub katalog rzeczywiście istnieje w systemie plików, lecz jedynie operuje na ciągach znaków. Klasa ta obsługuje zarówno ścieżki bezwzględne, jak i względne. Wszystkie elementy klasy są statyczne, więc można je wywoływać bez tworzenia instancji obiektu.

Niektóre z najczęściej wykorzystywanych metod to:

- Łączy dwie części ścieżki, tworząc pełną ścieżkę (automatycznie dodaje separator katalogów). Przykład

- Zwraca nazwę katalogu, w którym znajduje się plik, na podstawie pełnej ścieżki.

- Zwraca nazwę pliku z pełnej ścieżki.

- Zwraca rozszerzenie pliku (część po ostatniej kropce).

- Sprawdza, czy ścieżka jest absolutna (czy zawiera pełną informację o lokalizacji, np. “C:”).

- Zwraca ścieżkę do katalogu, w którym system przechowuje pliki tymczasowe.

- Zwraca pełną ścieżkę (łączy ścieżkę względną z bieżącym katalogiem roboczym).

- Określa, czy określony plik lub katalog istnieje.

- zwraca unikatową nazwę dla pliku/folderu.

Enviroment

Environment.GetFolderPath(Environment.SpecialFolder) - Umożliwia uzyskanie ścieżki do specjalnych folderów systemowych, takich jak dokumenty, aplikacje, dane użytkownika itp. Możesz uzyskać ścieżki do popularnych folderów użytkownika, takich jak MyDocuments, MyPictures, AppData itp.

Klasa Environment w C# jest dostępna także w systemie Linux, ale warto wiedzieć, że niektóre ścieżki, które są specyficzne dla systemu Windows (takie jak MyDocuments czy MyPictures), mogą się różnić w systemach Linux.Na Windowsie, SpecialFolder.MyDocuments zwróci folder “Dokumenty” w katalogu użytkownika (np. C:\Users\username\Documents) na linuksie ścieżka ta będzie się różnić lub nie istnieć.

Zadania

Zadanie 1

Napisz program, który zapisze do pliku tekstowego wynik.txt tekst który użytkownik wpisze w konsoli. Program powinien działać do momentu wciśnięcia klawisza ESC.

Zadanie 2

Napisz program, który odczytuje zawartość pliku wynik.txt i wyświetla ją na ekranie.

Zadanie 3

Napisz program w języku C#, który skopiuje plik ze ścieżki podanej jako pierwszy argument do lokalizacji podanej jako drugi argument. Program powinien obsługiwać wyjątki, takie jak:

Zadanie 4

Napisz program w języku C#, który zapisuje do pliku binarnego plik.bin różne typy danych, takie jak: