Czesc12
Część 12
12.1 Pliki - po co?
Aby zapamietywac dane nie tylko na czas działania programu, a też na
następne sesje z programem możemy dane zapisywać na dysku w postaci plików.
Przez pliki można także rozumieć urządzenia np. porty. Gdy dalej będziemy
mówić o plikach i podawać ich nazwę pamiętajmy o przypisanych nazwach do
portów odpowiednio:
"lpt1" "lpt2" "com1" "com2" "prn" itp.
!!!! Biblioteka stdio !!!!
12.2 Otwieranie i zamykanie pliku
Otwieranie pliku ma postać
wsk_plik = fopen("nazwa_pliku", "tryb");
tryb to string zawierający (w zależności od tego jaki plik potrzebujemy)
jeden z następujących znaków:
r
w
a
r+
w+
a+
Otwórz plik tylko do czytania
Stwórz plik do pisania. Jeśli plik istnieje będzie nadpisany
Odwarcie do dopisywania na końcu pliku. Jeśli plik nie istnieje będzie utworzony
Otwarcie istniejącego pliku do pisania i czytania
Tworzenie nowego pliku do czytania i pisania. Jesli plik istnieje
Otwarcie do dopisywania. Otwarcie (lub stworzenie jesli nie istnieje)do poprawiania na końcu pliku
Dodatkowo do strigu trybu możemy dopisać:
t - jeśli plik ma być otwarty w trybie tekstowym
b - tryb binarny.
Jesli ani t ni b nie zostało podane plik otwierany jest w zależności
od wartości zmiennej _fmode - default-owo ustawiona jest ona na O_TEXT,
ale można ją ustawić na O_BINARY.
Funkcja fopen zwraca wskaznik do struktury opisującej plik FILE
Przykład
-------------------------------------------------------------
FILE *plik;
plik = fopen("moj.txt", "wb");
// lub tak
plik = fopen("moj.txt", "a+t");
-------------------------------------------------------------
Jeśli nie udało sie otworzyć pliku fopen zwraca NULL.
Zamykanie pliku dokonujemy za pomocą funkcji fclose, której parametrem
jest wartość zwrócona przez fopen.
Przykład
-------------------------------------------------------------
FILE *plik;
plik = fopen("moj.txt", "wb");
fclose(plik);
-------------------------------------------------------------
Przykład pr121.cpp
12.3 Operacje na otwartych plikach
fgetc - wyprowadzenie kolejnego znaku z pliku
fputc - zapisanie kolejnego znaku na pliku
Przykład
-------------------------------------------------------------
FILE *plik;
int c;
plik = fopen("moj.txt", "rb");
c = fgetc(plik);
fclose(plik);
-------------------------------------------------------------
Przykład
-------------------------------------------------------------
FILE *plik;
int c;
plik = fopen("moj.txt", "wb");
fputc('A', plik); //wpisanie do pliku moj.txt znaku A
fclose(plik);
-------------------------------------------------------------
Przykład pr122.cpp
Jeśli na plik chcemy zapisywac lub wczytywać większe porcje niż 1 znak
to możemy użyć odpowiednio funkcji fwrite i fread których deklaracje wyglądają
następująco:
size_t fwrite(const void *ptr, size_t size, size_t n, FILE *stream);
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
Gdzie size i n są odpowiednio wielkością i ilością jednostek które do
pliku chcemy zapisać lub z pliku wczytać.
Przykład
-------------------------------------------------------------
FILE *plik;
long tab[10];
.
.
plik = fopen("moj.txt", "wb");
fwrite((void *)tab, sizeof(long), 10, plik);
fclose(plik);
//Teraz wczytamy
plik = fopen("moj.txt", "rb");
fread((void *)tab, sizeof(long), 10, plik);
fclose(plik);
-------------------------------------------------------------
Przykład pr123.cpp
Pisanie do pliku formatowane
int fprintf(FILE *stream, const char *format[, argument, ...]);
Wypisuje do pliku stream dane w formie podanej przez string format.
Do pliku piszwemy dokładnie to co zapisane w stringu format. Do teg stringu
w miejsca poprzedzone znakiem % w które to miejsca wstawione zostaną argumenty
występujące po formacie. Po znaku % mogą występować nastepujące znaki z
podaną interpretacją.
d
o
x
ld, lo, lx
c
s
e
f
n
p
zmienna int dziesiętnie
jw, ósemkowo
jw, szesnastkowo
odpowiednio jak wyżej tylko long
znak
string
double w postaci z wykładnikiem
double
wskaznik do int
wskaznik do int
Przed każdym z tych znaków może wystąpić określenie pola w którym wypisujemy
argument
- - wyrównaj do lewej
+ - wypisz ze znakiem
liczba - szerokość pola
.liczba - ilość miejsc po przecinku
Przykład
-------------------------------------------------------------
FILE *plik;
int i = 100;
char c = 'C';
float f = 1.2345554;
plik = fopen("moj.txt", "w+");
fprintf(plik, "Liczba long %d \nliczba float %5.3f \nstring
%s", i, f, "ala ma kota\nbla");
fclose(plik);
-------------------------------------------------------------
Przykład pr124.cpp
Odpowiedbikiem fprintf gdy chodzi o wczytywanie sformatowanego tekstu
jest funkcja fscanf
int fscanf(FILE *stream, const char *format[, address, ...]);
UWAGA Po stringu fornmatującynm nie występują zmienne tylko ich
adresy.
Przykład
-------------------------------------------------------------
FILE *plik;
int i = 100;
float f = 1.2345554;
plik = fopen("moj.txt", "r");
fscanf(plik, " %d, %f", &i, &f); //wczytuje z pliku liczbe int
i float
//które są oddzielone przecinkiem
fclose(plik);
-------------------------------------------------------------
Przykład pr125.cpp
UWAGA Przy wczytywaniu stringów spacja jest traktowana jako jego
koniec.
Jesli chcemy wczytac z pliku string ze spacjami zastosujemy funkcje
fgets
char *fgets(char *s, int n, FILE *stream);
Przykład pr126.cpp
12.4 Poruszanie się po pliku
Ustawienie wskaznika na określonym miejscu pliku odbywa się przy pomocy
funkcji fseek
int fseek(FILE *stream, long offset, int whence);
gdzie whence może przybierać wartość
SEEK_SET 0
początek pliku
SEEK_CUR 1 pozycja
aktualna
SEEK_END 2 koniec
pliku
Aby dowiedzieć sie gdzie jesteśmy zastosujmy ftell()
long int ftell(FILE *stream);
Zwraca ona pozycje na pliku licząc od początku.
Aby dowiedzieć sie czy nie jesteśmy poza końcem pliku mamy funkcje feof
int feof(FILE *stream);
Zwraca watrość różną od zera (prawde) gdy próbowaliśmy czytać po końcu
pliku.
Przykład pr127.cpp
Wyszukiwarka
Podobne podstrony:
czesc12 dodCZESC1 (2)Motywacja i emocje w sluzbie reklamy czesc1Teoria C 1D czesc1czesc1 wyk4swietemu bogu oddaj czesc1czesc1 wyk3czesc1czesc1czesc1czesc1 wyk1Korektor i wzmacniacz akustyczny 4x40W, czesc1regiony0 czesc1 11YEW3 Sprawdzian polski zadania czesc1czesc1czesc13 dodwięcej podobnych podstron