JASON. GRY, MUZYKA, KURSY, ARTYKUŁY, PROGRAMY I FILMY!

Przed nami dwa ostatnie wpisy o obsłudze plików dla początkujących. Demonstracja jaka zostanie tu ukazana będzie jakby powtórką dwóch poprzednich tematów, tylko w stosunku do plików binarnych (trudnych do odczytu i modyfikacji przy klasycznym podejściu "notatnikowym"). Zaczynając od zapisu jak zawsze, oto klasa "BinaryWriter" w języku C# i zapis danych do pliku binarnego!

"BINARYWRITER" W JĘZYKU C# RÓŻNI SIĘ TYLKO JEDNĄ RZECZĄ...

...i to jest binarny format zapisu o czym już wspomniałem we wprowadzeniu. Cały przebieg manipulowania danymi jakie mają się znaleźć w pliku jak i samym plikiem, jest identyczny względem klasy "StreamWriter". Pozostaje więc Was tam odesłać i zachęcić do przeczytania jeśli drapiecie się po głowie co ten Stasiek ma na myśli.

METODY KLASY "BINARYWRITER"

Było rzeczą łatwą do przewidzenia, że jak w poprzednim artykule było zestawienie tabelaryczne metod, dwa artykuły temu było zestawienie tabelaryczne metod, to w tym artykule także pojawi się odrębne zestawienie tabelaryczne metod. Przed Wami parę sztuk jakie znalazłem w książeczce:

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!).
Flush Czyszczenie wszystkich buforów i zapis danych bufora do pliku.
Seek Ustawienie pozycji w strumieniu.
Write Zapis danych do strumienia (przeciążenia tej metody pozwalają na wprowadzenie dowolnego typu prostego).

 

PRZYKŁAD KODU ŹRÓDŁOWEGO

Na deser jak zawsze serwuję dla Was przykład użycia jak działa "BinaryWriter" w języku C# i zamykamy temat:

string filename = "data.bin";
FileStream fs = new FileStream(filename, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);

for (char c = 'A'; c <= 'Z'; ++c)
{
	bw.Write(c);
}

for (int i = 1; i <= 100; ++i)
{
	bw.Write(i);
}

bw.Close();

Standard. Na początku określenie nazwy pliku z rozszerzeniem (w tym wypadku dałem ".bin", bo z reguły tak się oznacza pliki binarne, ale nie stanowi to wymagania), potem obiekt "FileStream", następnie instancja "BinaryWriter" w języku C# i zapis dowolnych danych. Teraz dałem dwie pętle "for" o odmiennych typach danych, bo przyda się to do ułatwienia Wam rozumienia tego fenomenu. Na końcu zakręcamy kurek metodą "Close", aby oficjalnie "ogłosić" programowi, że plik już został obsłużony.

Przy okazji spróbuję Was zainteresować wynikiem na wyjściu. Oto co ukazało się u mnie w "Visual Studio Code":

Zawartość pliku binarnego po użyciu klasy "BinaryWriter" w języku C#

Zawartości pliku binarnego po użyciu klasy "BinaryWriter" w języku C# ("Visual Studio Code").

Gdybyście byli ciekawi jaki tu panuje mechanizm, to opiszę krótko na chłopski rozum. "BinaryWriter" zapisuje informacje w układzie czterobajtowym. Kiedy ma dojść do wstawienia liczby 51, to obiekt nie umieszcza liczby 51 w postaci łańcucha znaków jak "StreamWriter", tylko konwertuje ją na system binarny i zawsze o długości 32 bitów. W takiej postaci dana trafia na swoje miejsce. Otwierając otrzymany plik w notatniku lub w dowolnym innym edytorze tekstowym zobaczymy raczej znaki zamiast liczb. To dlatego na samym początku widzimy kompletny "nietknięty" alfabet (zgodność z typem "char"), a pomiędzy oznaczeniami NUL występują pojedyncze znaki zamiast liczb całkowitych (a obowiązywał typ "int"). Znaki wyświetlane w programie zgadzają się z tabelką kodów ASCII więc podstawcie sobie znak do liczby zanim zaczniecie się pytać retorycznie dlaczego pojawia się taki znak, a nie inny.

Jasne jest, że nie da się z tym niczego sensownego zrobić. Chyba, że usunąć ale to daleko odbiega od działania rozsądnego. Można też spróbować odczytać i to zadanie spadnie na podobną klasę, "StreamReader".

Klasa "BinaryWriter" w języku C#

Instancja klasy "BinaryWriter" zapisuje dane do pliku, po skonwertowaniu na system dwójkowy. Każda komórka z danymi otrzymuje cztery bajty.


Jak może brzmieć podsumowanie? "BinaryWriter" w języku C# funkcjonuje w kodzie identycznie jak "StreamWriter". Różnica wystaje dopiero na wyjściu, kiedy to poprzednik zostawia wszystkie dane na widoku, a "BinaryWriter" szyfruje w sposób binarny.

PODOBNE ARTYKUŁY