PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
1 /24
Podstawy programowania komputerów
Podstawy programowania komputerów
Wykład 9: „Operacje na plikach w ANSI C”
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
2 /24
O
O
peracje
peracje
plikowe
plikowe
(nie obiektowo)
(nie obiektowo)
Plik - dokument lub inny zbiór danych zapisany na dysku,
oznaczony unikatową nazwą. Plik jest ciągiem bajtów
Plik w C:
plik dyskowy (
disk file
disk file
)
urządzenie peryferyjne typu
terminal
terminal
drukarka
plik na taśmie magnetycznej (
tape drive file
tape drive file
)
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
3 /24
Strumień
Strumień
Strumień (
stream
stream
) w C: przepływ danych z
programu do pliku lub odwrotnie
Strumień nie jest związany z konkretnym
urządzeniem (
device
device
-
-
independend
independend
)
Aby przeprowadzić operację Wejścia/Wyjścia,
należy skojarzyć plik ze strumieniem
Dwa formaty strumieni:
text or binary stream
text or binary stream
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
4 /24
Buforowanie Wejścia/Wyjścia
Buforowanie Wejścia/Wyjścia
Bufor (
buffer
buffer
) - obszar pamięci służący do tymczasowego
przechowywania danych przed przesłaniem ich do miejsca
przeznaczenia
Posługując się buforami system operacyjny zmniejsza
ilość odwołań do fizycznych urządzeń Wejścia/Wyjścia
Strumienie We/Wy są buforowane w sposób domyślny
Fizyczny zapis do pliku -
buffer flush
buffer flush
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
5 /24
Wskaźniki typu FILE
Wskaźniki typu FILE
Struktura FILE służy do zarządzania plikami i jest
zdefiniowana w pliku
stdio.h
stdio.h
Wskaźnik typu FILE -
file pointer
file pointer
, służy do
odwoływania się do konkretnego pliku dyskowego.
W obrębie struktury FILE można znaleźć: rozmiar pliku,
znacznik pozycji w pliku , adres bufora danych itp.
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
6 /24
Otwieranie pliku
Otwieranie pliku
# include <stdio.h>
FILE *fopen(const char *filename, const
char *mode);
Jeśli operacja otwarcia pliku nie powiedzie się, funkcja zwraca
wskaźnik pusty (
null pointer
null pointer
).
Tryby otwarcia pliku:
tryb
w
w
tworzy plik
a+b
ab+
ab
a+
a (append)
w+b
wb+
wb
w+
w (write)
r+b
rb+
rb
r+
r (read)
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
7 /24
Otwieranie/zamykanie pliku
Otwieranie/zamykanie pliku
FILE *fptr;
if ((fptr = fopen(„TEST.TXT”, „r”))
== NULL)
{
printf(„Nie moge otworzyc pliku
TEST.TXT.\n);
exit(1)
}
Po wykonaniu operacji plik należy odłączyć od strumienia
danych:
int fclose(FILE *ptr);
Funkcja
fclose( )
fclose( )
wykonuje czyszczenie bufora.
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
8 /24
Odczyt i zapis plików
Odczyt i zapis plików
fgetc( )
fgetc( )
i
fputc( )
fputc( )
znak-po-znaku
int fgetc(FILE *stream);
int fputc(int c, FILE *stream);
fgets( )
fgets( )
i
fputs( )
fputs( )
wiersz-po-wierszu
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
fread( )
fread( )
i
fwrite( )
fwrite( )
blok-po-bloku
size_t fread(void *ptr, size_t size,
size_t n, FILE *str);
size_t fwrite(const void *ptr, size_t
size, size_t n, FILE *str);
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
9 /24
Funkcje do obsługi plików (
Funkcje do obsługi plików (
stdio.h
stdio.h
)
)
rewind( )
rewind( )
– przewija plik do początku
ferror( )
ferror( )
– sprawdza sukces operacji na pliku
remove( )
remove( )
– usuwa plik
rename( )
rename( )
– zmienia nazwę pliku
tmpfile( )
tmpfile( )
– otwiera plik tymczasowy
tmpname( )
tmpname( )
– generuje niepowtarzalną nazwę pliku
access( )
access( )
– sprawdza istnienie pliku w systemie
fseek( )
fseek( )
– wyszukiwanie danych w pliku
feof( )
feof( )
– wykrywa koniec pliku
PP
200
5
©
Walery
Sus
łow
swalover@ie.tu.koszalin.pl
10 /24
Inne funkcje do obsługi plików
Inne funkcje do obsługi plików
Podobne i rozszerzone funkcje obsługi pliku dostępne są
też poprzez pliki nagłówkowe
io.h
io.h
,
dos.h
dos.h
, lecz nie są one
zdefiniowane w standardzie ANSI C.
Użyteczne funkcje działające na katalogach z
dir.h
dir.h
:
chdir
chdir
( )
( )
– zmienia nazwę katalogu
mkdir
mkdir
( )
( )
– tworzy katalog
opendir
opendir
( ), closedir( )
( ), closedir( )
– otwiera i zamyka strumień
związany z katalogiem