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