10 - Operacje na plikach
- Jak wygląda obsługa wejścia/wyjścia przez funkcje scanf i printf.
- W jaki sposób używa się wskaźników.
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.
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!");
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);