wykład 10

Transkrypt

wykład 10
Obsługa plików
•
•
•
•
•
•
Co to jest plik?
Ogólny schemat obsługi pliku w języku C
Obsługa pliku tekstowego (przykład)
Obsługa pliku binarnego (przykład)
Funkcje do obsługi plików
Funkcje do obsługi systemu plików
140
Co to jest plik?
Plik to jednostka zapisu i przechowywania danych w
komputerze.
Plik to ciąg bajtów danych zapisanych w pamięci trwałej
(dysk twardy, nośnik), opatrzony nazwą i atrybutami.
Dane w pliku są zapisane w odpowiednim formacie.
Format pliku określa rodzaj informacji jakie zostały
zapisane w pliku oraz sposób ich zapisu.
Rodzaje plików:
Plik tekstowy zawiera tekst w postaci bezpośredniej,
tzn. możliwej do zinterpretowania bez dodatkowych
przekształceń (np. tekst w kodzie ASCII).
Plik binarny posiada określoną strukturę.
141
Ogólny schemat obsługi pliku
1. Deklaracja zmiennej plikowej
2. Otwarcie pliku
3. Odczyt i zapis do pliku
4. Zamknięcie pliku
142
1. Deklaracja zmiennej plikowej
#include <stdio.h>
...
FILE *plik;
Wskaźnik typu FILE*
WSKAŹNIK PLIKU
(zmienna plikowa)
Struktura FILE zawiera informacje
dotyczące pliku:
• rozmiar pliku w bajtach
• rodzaj dostępu do pliku (odczyt, zapis)
• znacznik pozycji w pliku
• adres bufora danych związanego z plikiem
• itd.......
143
2. Otwarcie pliku
FILE *fopen(char *nazwa, char *tryb);
NAZWA PLIKU:
nazwa, np. ”list.txt”
pełna ścieżka, np. ”C:\\Dokumenty\\list.txt”
TRYBY OTWARCIA PLIKU:
r
w
a
(odczyt)
r
(zapis)
w
(dopisywanie) a
rt
wt
at
rb
wb
ab
ISTNIEJE
TWORZY
DOPISUJE
144
2. Otwarcie pliku
Skojarzenie zmiennej plikowej z plikiem na dysku.
plik = fopen(”tekst.txt”, ”r”);
if (plik == NULL)
{
printf(”Błąd otwarcia pliku.\n”);
exit(1);
/* return –1 */
}
145
3. Odczyt i zapis do pliku
PLIK TEKSTOWY
fscanf(), fprintf()
- DOWOLNE DANE
int fscanf(FILE *wsk, char *format, <arg1>, <arg2>,...);
int fprintf(FILE *wsk, char *format, <adr1>, <adr2>,...);
fgetc(), fputc()
- ZNAKI
int fgetc(FILE *wsk);
int fputc(int c, FILE *wsk);
fgets(), fputs()
- CIĄGI ZNAKÓW, WIERSZE
char *fgets(char *s, int maxn, FILE *wsk);
int fputs(char *s, FILE *wsk);
146
3. Odczyt i zapis do pliku
PLIK BINARNY
fread(), fwrite()
- BLOKI BAJTÓW
size_t fread(void *p, size_t rozmiar,
size_t n, FILE *wsk);
size_t fwrite(const void *p, size_t rozmiar,
size_t n, FILE *wsk);
147
4. Zamknięcie pliku
int fclose(FILE *wsk);
fclose(plik);
148
Obsługa pliku tekstowego
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/* obsluga we/wy i plikow */
/* funkcja getch() */
/* funkcja exit() */
int main(int liczba_arg, char *arg[])
{
FILE *plik;
char wiersz[81];
int nr = 0;
if (liczba_arg != 2)
{
printf("\nWyswietlanie pliku tekstowego\n");
printf("\nWywolanie: PROGRAM <nazwa pliku>");
exit(1);
}
149
Obsługa pliku tekstowego
if ((plik = fopen(arg[1], "r")) == NULL)
{
printf("\nBlad otwarcia pliku %s", arg[1]);
exit(1);
}
while (fgets(wiersz, 80, plik) != NULL)
{
printf("%s", wiersz);
if (++nr == 24)
{
getch();
nr = 0;
}
}
fclose(plik);
return 0;
}
150
Obsługa pliku binarnego
struct data
{
int rok;
int mies;
int dzien;
};
struct osoba
{
char imie[15];
char nazwisko[20];
struct data data_ur;
};
struct osoba student;
FILE *plik;
...
fwrite(&student, sizeof student, 1, plik);
...
fread(&student, sizeof student , 1, plik);
151
Funkcje do obsługi plików
Biblioteka standardowa: stdio.h
feof
ferror
fseek
ftell
rewind
wykrycie znaku końca pliku EOF
sprawdzenie poprawności wykonania operacji na pliku
ustawianie znacznika pozycji w pliku
zwrócenie znacznika pozycji w pliku
ustawienie znacznika pozycji w pliku na jego początku
fgetpos
fsetpos
zwrócenie pozycji wskaźnika w pliku
ustawienie pozycji wskaźnika w pliku
152
Funkcje do obsługi systemu plików
Biblioteka standardowa: stdio.h
remove
rename
tmpfile
tmpnam
usunięcie pliku
zmiana nazwy pliku
otwarcie pliku tymczasowego
wygenerowanie unikalnej nazwy pliku
153