Podstawowe operacje na plikach w .NET

Operacje na plikach należą do jednych z podstawowych funkcjonalności programów niezależnie od tego, czy występują one w postaci interakcji z użytkownikiem, czy stanowią część zautomatyzowanych funkcji programu. Dla zapewnienia efektywnego programowania należy poznać podstawowe operacje na plikach, jakie oferuje środowisko .NET.

Za przykład posłużą nam operacje na plikach tekstowych. Odczyt oraz zapis pliku tekstowego jest przykładem dosyć przejrzystym, dającym zobaczyć dokładne efekty funkcjonowania programu.

Interfejs przykładowej aplikacji napisanej w języku C# składa się z podstawowych kontrolek:

  • fileTextBox1 – jej właściwość Text odpowiada za przechowywanie ścieżki dostępowej do pliku,
  • openButton1, saveButton1, saveAsButton1button’y wywołujące operacje na plikach przy użyciu metod ReadAllText oraz WriteAllText,
  • openButton2, saveButton2, saveAsButton2button’y wywołujące operacje na plikach przy użyciu klas StreamReader oraz StreamWriter,
  • richTextBox1 – pole tekstowe przechowujące zawartość pliku tekstowego do zapisu lub po jego odczycie, właściwość Multiline ustawiona na True,
  • openFileDialog1, saveFileDialog1 – okna dialogowe umożliwiające wybór ścieżki odczytu lub zapisu oraz nazwę pliku, właściwość Filter ustawiona na “Text files (*.txt)|*.txt|All files (*.*)|*.*”.
Podstawowe operacje na plikach

Podstawowe operacje na plikach Interfejs

Aby móc skorzystać z klas udostępniających operacje na plikach musimy dokonać deklaracji przestrzeni nazw IO.

Operacje na plikach przy użyciu metod ReadAllText oraz WriteAllText

Wykorzystanie metody ReadAllText klasy File jest dosyć prostym procesem od strony programistycznej. Metoda zwraca obiekt typu string, który możemy przekazać bezpośrednio do właściwości Text kontrolki richTextBox1. Za argument metody możemy podać jedynie ścieżkę dostępową do pliku. W tym celu korzystamy z właściwości FileName obiektu openFileDialog1 po ówczesnym sprawdzeniu, czy w oknie dialogowym na pewno wybrany został przycisk OK. Warto zwrócić uwagę na to, że okno dialogowe możemy wywołać przy pomocy metody ShowDialog bezpośrednio z instrukcji warunkowej if.

W równie prosty sposób jesteśmy w stanie użyć metody WriteAllText do zapisu tekstu do pliku tekstowego na dysku. Możemy zrobić to dokonując zapisu przy użyciu ścieżki zdefiniowanej w polu tekstowym fileTextBox1 lub we właściwości FileName okna dialogowego saveFileDialog1. Metoda WriteAllText wymaga jeszcze drugiego argumentu w postaci obiektu tekstowego przechowującego wartość tekstową przeznaczoną do zapisu. W naszym przypadku odwołujemy się bezpośrednio do właściwości Text kontrolki richTextBox1.

Operacje na plikach przy użyciu klas StreamReader oraz StreamWriter

Konstruktory klas StreamReader oraz StreamWriter wymagają jako argumentu obiektu klasy FileStream. W przypadku odczytu pliku wystarczy, że zdefiniujemy go z argumentami FileMode.Open oraz FileAccess.Read, musimy pamiętać jednak, że wówczas nie możemy korzystać z tego samego obiektu klasy FileStream chcąc nadpisać edytowany plik. Sam odczyt umożliwia nam metoda ReadToEnd udostępniana przez obiekt klasy StreamReader, zwraca ona obiekt typu string. Alternatywny sposób utworzenia obiektu klasy FileStream przedstawiony został w linii [7] kodu.

Podczas zapisu do pliku, niezależnie czy korzystamy z doboru ścieżki pliku przy pomocy kontrolki fileTextBox1 czy saveFileDialog1 obiekt klasy FileStream musi zostać utworzony przez konstruktor z parametrami zapewniającymi otwarcie lub utworzenie nowego pliku, gdyby wskazany przez ścieżkę nie istniał (FileMode.OpenOrCreate) oraz pozwalającymi na zapis do pliku (FileAccess.Write). Sam proces zapisu realizowany jest przez metodę Write udostępnianą przez obiekt klasy StreamWriter oraz przyjmującą jako argument zmienną tekstową przeznaczoną do zapisu w postaci właściwości Text kontrolki richTextBox1.

Operacje na plikach przy korzystaniu z obiektów klas StreamReader, StreamWriter oraz FileStream wymuszają na nas konieczność pamiętania o zwolnieniu obiektów przy pomocy metody Close.

Korzystanie z powyższych klas wydaje się być bardziej skomplikowane niż użycie metod ReadAllText i WriteAllText, dają one jednak nam o wiele większe możliwości, możemy decydować swobodnie o sposobie dostępu do pliku, możemy również zapisywać w ten sposób różne rodzaje plików, nawet w formie binarnej, jeżeli skorzystamy z klas BinaryReader oraz BinaryWriter.

Programista nie musi zapamiętywać całego schematu korzystania z tej formy dostępu do plików. Wystarczy, że zapamięta konieczność użycia klas StreamReader oraz StreamWriter, reszta schematu zostanie podpowiedziana przez IntelliSense w Visual Studio dzięki zasadom programowania obiektowego.

Operacje na plikach w ASP.net

Platforma ASP.net wykorzystuje język C#, więc operacje na plikach wyglądają w tym przypadku bardzo podobnie. Podstawową różnicą jest konieczność korzystania z przestrzeni dyskowej udostępnianej przez serwer, a nie z dysku lokalnego. Wymusza to na programiście dostosowanie się do tych warunków.

Wykorzystując metody ReadAllText oraz WriteAllText musimy zdefiniować ścieżkę dostępu przy użyciu metody MapPath oraz jej argumentu w postaci nazwy pliku.

W podobny sposób postępujemy korzystając z klasy FileStream. Jest to najistotniejsza różnica w przypadku operacji na plikach w ASP.net.

Przykładowe projekty C# oraz ASP.net użycie w kursie znajdują się w linku: Podstawowe operacje na plikach CodeEnclave

Loading Disqus Comments ...
Loading Facebook Comments ...