Programowanie w C
Wykład 4
Temat: Operacje we/wy - obsługa plików
Funkcje otwarcia i zamknięcia pliku
FILE* fopen (const char* namefile, const char* mode);
namefile - nazwa pliku
mode - tryb ustawienia pliku:
r - do czytania; zbiór musi istnieć
w - otwiera pusty zbiór do zapisu; jeśli plik istnieje kasuje jego
zawartość
a - do zapisu na końcu zbioru; jeśli plik nie istnieje tworzy nowy
r+ - otwiera istniejący plik do zapisu i odczytu
w+ - otwiera pusty plik do zapisu i odczytu; istniejący plik kasuje
a+ - otwiera do odczytu i zapisu na końcu pliku; jeżeli plik nie
istnieje to go tworzy.
b - otwiera plik w trybie binarnym
a i a+ - zapisuje zawsze na końcu mimo użycia funkcji
pozycjonującej fseek()
w i w+ - zawsze kasuje istniejący plik
#include <stdio.h>
#include <stdio.h>
Funkcje otwarcia i zamknięcia pliku
int fclose (FILE* pfile);
Funkcja zwraca wartość:
0 – jeżeli zamknięcie pliku zostało wykonane poprawnie;
EOF – w przypadku błędu operacji zamykania pliku (-1).
#include <stdio.h>
void
main()
{
FILE
* pfile = fopen(”plik.txt”, ”rt”);
if (pfile)
{
printf(”Plik otwarty.\n”);
fclose(pfile);
}
else printf(”Błąd otwarcia pliku!\n”);
}
Funkcje fgetc, fputc, fgets, fputs
Odczyt znaku ze strumienia:
int fgetc(FILE* stream);
Fgetc czyta znak ze
strumienia stream jako
unsigned char i
przekształca do int .
Zwraca znak czytany lub
EOF jeśli powstał błąd lub
napotkano EOF (end of
file).
Zapis znaku do strumienia:
int fputc(int c, FILE* stream);
Fputc zapisuje
pojedynczy znak do
zbioru.
Zwraca pisany znak lub
EOF jeśli powstał błąd lub
napotkano EOF.
Odczyt stringu ze strumienia:
char* fgets(char* string, int n, FILE* stream);
Odczytuje ze strumienia
stream
ciąg znaków aż do:
- pierwszego znaku '\n'
(włącznie)
- do końca strumienia
- lub gdy przeczytano n-1
znaków
i wstawia je do stringu
dołączając na końcu '\0‘.
Zwraca
string lub
NULL jeśli
powstał błąd
lub
napotkano
EOF.
Zapis stringu do strumienia:
int fputs(char* string, FILE* stream);
Wysyła string do
strumienia wskazanego
parametrem stream, bez
końcowego znaku '\0'.
Zwraca EOF jeśli
powstał błąd, w
przeciwnym razie
wartość różną od 0.
#include <stdio.h>
#include <stdio.h>
Formatowany zapis do zbioru
Funkcja
Opis
Wartość zwracana
int fprintf (FILE *stream, const *
format,...);
Funkcja formatuje i
wpisuje
dane do strumienia
określonego
parametrem stream.
Zwraca liczbę
zapisanych znaków lub
-1 gdy wystąpił błąd.
int fscanf (FILE *stream, const *
format,...);
Funkcja czyta dane ze
strumienia określonego
parametrem stream, od
bieżącej pozycji, i
umieszcza w miejscu
pamięci wskazanym w
parametrze nieustalonym.
Zwraca liczbę
przepisanych
danych wejściowych,
gdy
wystąpił błąd: 0 lub
EOF napotkano koniec
zbioru.
#include <stdio.h>
#include <stdio.h>
”File pointer” w przypadku powodzenia w obu
operacjach przesuwa się o liczbę bajtów
przeczytanych/zapisanych w zbiorze.
int feof(FILE* file);
// zwraca wartość niezerową gdy
// napotka koniec pliku
Odczyt i zapis do pliku n elementów o
określonym rozmiarze
! Ponieważ najczęściej powyższe funkcje stosuje się do
przesyłania bardziej złożonych obiektów, takich jak np.
struktury, przykład ich wykorzystania podany będzie
przy okazji omawiania struktur !
Sterowanie wskaźnikiem pozycji
strumienia
Sterowanie wskaźnikiem pozycji
strumienia
Przykładowy program...
Obsługa błędów
Kiedy jakaś operacja nie powiedzie się, pojawia się błąd i dla
danego strumienia (pliku) ustawiany jest wskaźnik błędu.
Informacje o ostatnio popełnionym błędzie przechowywane
są w zmiennych [
int errno, _doserrno, sys_nerr
(w
stdlib.h)] gdzie:
errno
- numer błędu operacji matematycznych lub systemu
DOS;
_doserrno
- numer błędu dla systemu DOS;
sys_nerr
- zawiera liczbę komunikatów w tablicy
sys_errlist[]
;
komunikaty znajdują się w tablicy
char *sys_errlist[]
;
funkcja
perror
jest używana do drukowania komunikatów.
Obsługa błędów
Obsługa błędów
Argumenty funkcji ”main”
#include <conio.h>
#include <stdio.h>
int
main (
int
argc,
char *
argv[])
{
int
i;
switch (argc)
{
case 1:
printf (
"Program uruchomiono bez parametrow!\n"
);
break;
default:
printf (
"Parametry uruchomieniowe programu:\n"
);
for (i = 1; i < argc; i++)
printf (
"%d: %s\n"
, i, argv[i]);
break;
}
printf (
"\nNacisnij dowolny przycisk, aby zakonczyc...\n"
);
getch ();
return 0;
}