Jason. Cała informatyka w jednym miejscu!

I jeszcze raz, ostatni raz o obsłudze plików w "CSharpie". "BinaryReader" w języku C# staje się ostatnim już wątkiem jaki mam na obecną chwilę do przedstawienia, jeśli chodzi o obsługę plików. Do dzieła, i później już daję święty spokój :D!

ODCZYT PLIKU BINARNEGO? UDERZAJ Z TEMATEM DO KLASY "BINARYREADER" W JĘZYKU C#

Mechanizm odczytu pliku jest bardzo zbliżony do omawianej wcześniej konstrukcji "StreamReader" w języku C#, zatem jeśli posłuchacie mnie i klikniecie sobie wstawiony odnośnik, dowiecie się wszystkich niezbędnych informacji.

METODY KLASY "BINARYREADER"

Znowu to samo :P. Oto zestaw kilkunastu metod znowu pobranych z książki:

NAZWA ZNACZENIE
Close Zamknięcie strumienia (bardzo ważnym jest, żeby ZAWSZE na końcu wywołać tę metodę; inaczej plik może się nie ukazać w katalogu i nie będzie możliwe wykonywanie na nim operacji!).
PeekChar Zwrot następnego dostępnego znaku bez przechodzenia do następnego.
Read Odczyt bajtów ze strumienia i przesunięcie pozycji strumienia.
ReadBoolean Odczyt wartości typu "boolean" i przesunięcie pozycji strumienia o jeden bajt.
ReadByte Odczyt kolejnego bajta ze strumienia i przesunięcie pozycji strumienia o jeden bajt.
ReadBytes Odczyt określonej liczby bajtów ze strumienia, zwrócenie tablicy bajtów z danymi i przesunięcie pozycji strumienia o tę samą liczbę bajtów.
ReadChar Odczyt znaku ze strumienia i przesunięcie pozycji strumienia o określoną liczbę bajtów, w zależności od ustalonego kodowania znaków ("Encoding").
ReadChars Odczyt określonej liczby znaków ze strumienia, zwrócenie tablicy znaków z danymi i przesunięcie pozycji strumienia o tę samą liczbę znaków (tutaj również ma wpływ wybrany system kodowania znaków).
ReadDecimal Odczyt wartości typu "decimal" i przesunięcie pozycji strumienia o 16 bajtów.
ReadDouble Odczyt ośmiobitowej wartości typu "double" i przesunięcie pozycji strumienia o 8 bajtów.
ReadInt16 Odczyt dwubajtowej wartości typu "short" i przesunięcie pozycji strumienia o 2 bajty.
ReadInt32 Odczyt czterobajtowej wartości typu "int" i przesunięcie pozycji strumienia o 4 bajty.
ReadInt64 Odczyt ośmiobajtowej wartości typu "long" i przesunięcie pozycji strumienia o 8 bajtów.
ReadSByte Odczyt wartości typu "sbyte" i przesunięcie pozycji strumienia o jeden bajt.
ReadSingle Odczyt czterobajtowej wartości typu "float" i przesunięcie pozycji strumienia o 4 bajty.
ReadString Odczyt wartości typu "string".
ReadUInt16 Odczyt dwubajtowej wartości typu "ushort" i przesunięcie pozycji strumienia o 2 bajty.
ReadUInt32 Odczyt czterobajtowej wartości typu "uint" i przesunięcie pozycji strumienia o 4 bajty.
ReadUInt64 Odczyt ośmiobajtowej wartości typu "ulong" i przesunięcie pozycji strumienia o 8 bajtów.

Sprawa z odczytem danych w "BinaryReader" w języku C# wygląda inaczej niż przy zapisie. Otóż jak możecie łatwo dostrzec, na każdy typ danych istnieje osobna metoda. A to oznacza, że trzeba ręcznie ustalić kolejność odczytu właściwych typów wartości. Albo jeszcze inaczej, trzeba znać kombinację jaka obowiązywała podczas zapisu. Nawet jeśli skorzystacie wyłącznie z metody "Read", to i tak trzeba wiedzieć w której kolejności konwertować na jaki typ!

PRZYKŁAD KODU ŹRÓDŁOWEGO

A teraz prosty przykład nawiązujący do kodu z poprzedniego artykułu i kończymy z tym:

string filename = "data.bin";
FileStream fs = new FileStream(filename, FileMode.Open);
BinaryReader br = new BinaryReader(fs);

for (char c = 'A'; c <= 'Z'; ++c)
{
	Console.WriteLine(br.ReadChar());
}

for (int i = 1; i <= 100; ++i)
{
	Console.WriteLine(br.ReadInt32());
}

br.Close();

Wada została już wymieniona - to jest posiadanie wiedzy o kombinacji przechowanych danych. Przy pomocy instancji "FileStream" otwieramy plik i tworzymy sobie w oparciu o niego obiekt "BinaryReader". Następnie korzystając z identycznej budowy obu pętli "for" wydobywamy jedną daną po drugiej przy pomocy metod dopasowanych pod odpowiedni typ danych (najpierw był "char", potem "int"). Po sprawie, zamykamy strumień ("Close").

Klasa "BinaryReader" w języku C#

Korzystając z instancji klasy "BinaryReader", jest możliwe odtworzenie wcześniej zapisanych danych w systemie binarnym! Minusem jest wymagana wiedza o kombinacji w jakiej kolejności które typy trzeba odczytać.


Tak się kończy cykl artykułów o obsłudze plików. "BinaryReader" w języku C# to ostatni przedstawiciel obchodzenia się z zawartością plików jaki chciałem zaprezentować. Nie sposób określić czy temat zaliczyć do pobocznych, czy podstawowych. Oceńcie to już we własnym zakresie.

PODOBNE ARTYKUŁY