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!
Tweet |
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").
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.