10 - Operacje na plikach

Ikona obiektów Cele lekcji
Zdobycie umiejętności wczytywania i zapisywania danych do pliku.

Ikona obiektów Co powinieneś już wiedzieć?
  • Jak wygląda obsługa wejścia/wyjścia przez funkcje scanf i printf.
  • W jaki sposób używa się wskaźników.

Ikona obiektów Operacje na plikach

Do wczytywania danych z pliku i zapisywania wyników do pliku można użyć funkcji z biblioteki stdio.h i zmiennych typu FILE.
Do otwarcia pliku służy funkcja fopen o składni:

FILE *fopen(const char *path, const char *mode)

Funkcja fopen zwraca wskaźnik do zmiennej typu FILE, oznaczającej otwarty przez nas plik. Pierwszym argumentem funkcji jest ścieżka do pliku, który chcemy otworzyć. Drugi argument mówi, w jakim trybie chcemy ten plik otworzyć. Przykładowe wartości tego parametru to:

  • "r" - otwarcie pliku do odczytu
  • "w" - stworzenie pliku do zapisu
  • "a" - otwarcie pliku do dopisywania (jeśli plik nie istnieje, jest tworzony)

Do wczytywania i zapisywania danych do pliku służą funkcje fscanf i fprintf. Ich pierwszym argumentem jest wskaźnik do zmiennej typu FILE, odpowiadającej plikowi, na którym chcemy działać. Pozostałe argumenty są takie same, jak dla funkcji scanf i printf.

Po zakończeniu pracy z plikiem, należy go zamknąć przy użyciu funkcji fclose, przyjmującej jako argument wskaźnik do zmiennej typu FILE.


Ikona obiektów Przykład

Poniższy kod spowoduje wczytanie liczby z pliku in.txt i zapisanie tej liczby w pliku out.txt.

int a;
FILE *plik;
if ((plik=fopen("in.txt","r"))==NULL)

printf("Nie można otworzyć pliku do odczytu!");
else
{
fscanf(plik,"%d",&a);
fclose(plik);
if ((plik=fopen("out.txt","w"))!=NULL)
{
fprintf(plik,"wczytana liczba to %d",a);
fclose(plik);
}
else printf("Nie można otworzyć pliku do zapisu!");
}


Ikona obiektów Znak końca pliku

Jeśli podczas wczytywania danych z pliku dojdziemy do jego końca, funkcja fscanf zwróci wartość EOF (znak końca pliku). Na przykład, poniższy kod spowoduje przepisanie całej zawartości pliku in.txt na standardowe wyjście:

FILE *plik=fopen("in.txt","r");
char c;
while (fscanf(plik,"%c",&c)!=EOF)

printf("%c",c);
fclose (plik);