C/Czytanie i pisanie do plików: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m format
m =
Linia 156:
Tym razem skorzystaliśmy już z dużo większego repertuaru funkcji. Między innymi można zauważyć tutaj funkcję [[C/fputc|fputc()]], która umieszcza pojedynczy znak w pliku. Ponadto w wyżej zaprezentowanym programie została użyta stała EOF, która reprezentuje koniec pliku (ang. ''End Of File''). Powyższy program otwiera plik, którego nazwa przekazywana jest jako pierwszy argument programu, a następnie kopiuje dane z wejścia programu (''stdin'') na wyjście (''stdout'') oraz do utworzonego pliku (identyfikowanego za pomocą fp). Program robi to tak długo, aż naciśniemy kombinację klawiszy Ctrl+D (w systemach Unixowych) lub Ctrl+Z(w Windows), która wyśle do programu informację, że skończyliśmy wpisywać dane. Program wyjdzie wtedy z pętli i zamknie utworzony plik.
 
=== Rozmiar pliku ===
Dzięki standardowym funkcjom języka C możemy m.in. określić długość pliku. Do tego celu służą funkcje [[C/fsetpos|fsetpos]], [[C/fgetpos|fgetpos]] oraz [[C/fseek|fseek]]. Ponieważ przy każdym odczycie/zapisie z/do pliku wskaźnik niejako "przesuwa" się o liczbę przeczytanych/zapisanych bajtów. Możemy jednak ustawić wskaźnik w dowolnie wybranym miejscu. Do tego właśnie służą wyżej wymienione funkcje. Aby odczytać rozmiar pliku powinniśmy ustawić nasz wskaźnik na koniec pliku, po czym odczytać ile bajtów od początku pliku się znajdujemy. Użyjemy do tego tylko dwóch funkcji: [[C/fseek|fseek]] oraz [[C/fgetpos|fgetpos]]. Pierwsza służy do ustawiania wskaźnika na odpowiedniej pozycji w pliku, a druga do odczytywania na którym bajcie pliku znajduje się wskaźnik. Kod, który określa rozmiar pliku znajduje się tutaj:
<syntaxhighlight lang="C">
Linia 182:
Znajomość rozmiaru pliku przydaje się w wielu różnych sytuacjach, więc dobrze przeanalizuj przykład!
 
===Przykład - pliki graficzne===
Plik graficzny tworzymy :
* bezpośrednio w C ( fprintf / fwrite )
Linia 190:
 
 
====rastrowy====
 
 
 
 
=====dostęp sekwencyjny=====
[[Grafika:Color_complex_plot.jpg|229px|right|thumb|Przykład użycia tej techniki, sekwencyjny dostęp do danych ([[:Grafika:Color complex plot.jpg|kod źródłowy]])]]
[[Grafika:Julia_IIM_1.jpg|229px|right|thumb|Przykład użycia tej techniki, swobodny dostęp do danych ([[:Grafika:Julia_IIM_1.jpg| kod źródłowy]])]]
Linia 225:
 
W powyższym przykładzie dostęp do danych jest '''sekwencyjny'''.
=====dostęp swobodny=====
Jeśli chcemy mieć '''swobodny''' dostęp do danych to :
*korzystać z funkcji: [[C/fsetpos|fsetpos]], [[C/fgetpos|fgetpos]] oraz [[C/fseek|fseek]],
Linia 246:
* szybszy ( w pamięci ) dostęp do danych
 
====wektorowy====
Bardzo łatwo również utworzyć plik SVG<ref>[[:commons:File:Poincare_halfplane_eptagonal_hb.svg|Tworzenie pliku SVG - Claudio Rocchini]]</ref>