Inne działy

 

 

Język C podstawowa obsługa plików

 

Istnieją dwie metody obsługi czytania i pisania do plików:

 

  • wysokopoziomowa,
  • niskopoziomowa.


Nazwy funkcji z pierwszej grupy zaczynają się od litery “f” (np. fopen(), fread(), fclose()), a identyfikatorem pliku jest wskaźnik na strukturę typu FILE. Owa struktura to pewna grupa zmiennych, która przechowuje dane o danym pliku — jak na przykład aktualną pozycję w nim. Szczegółami nie musisz się przejmować, funkcje biblioteki standardowej same zajmują się wykorzystaniem struktury FILE, programista może więc zapomnieć, czym tak naprawdę jest struktura FILE i traktować taką zmienną jako “uchwyt”, identyfikator pliku.

Druga grupa to funkcje typu read(), open(), write() i close(). Podstawowym identyfikatorem pliku jest liczba całkowita, która jednoznacznie identyfikuje dany plik w systemie operacyjnym. Liczba ta w systemach typu UNIX jest nazywana
deskryptorem pliku. Należy pamiętać, że nie wolno nam używać funkcji z obu tych grup jednocześnie w stosunku do jednego, otwartego pliku, tzn. nie można najpierw otworzyć pliku za pomocą fopen(), a następnie odczytywać danych z tego samego pliku za pomocą read().


Czym różnią się oba podejścia do obsługi plików? Otóż metoda wysokopoziomowa ma swój własny bufor, w którym znajdują się dane po odczytaniu z dysku a przed wysłaniem ich do programu użytkownika. W przypadku funkcji niskopoziomowych dane kopiowane są bezpośrednio z pliku do pamięci programu. W praktyce używanie funkcji wysokopoziomowych jest prostsze a przy czytaniu danych małymi porcjami również często szybsze i właśnie
ten model zostanie tutaj zaprezentowany.

Skupimy się teraz na najprostszym z możliwych zagadnień — zapisie i odczycie pojedynczych znaków oraz całych łańcuchów. Napiszmy zatem nasz pierwszy program, który stworzy plik “test.txt” i umieści w nim tekst “Hello world”:

 

#include <stdio.h>
#include <stdlib.h>
int main ()
{
FILE *fp; /* używamy metody wysokopoziomowej */
/* musimy mieć zatem identyfikator pliku, uwaga na gwiazdkę! */
char tekst[] = "Hello world";
if ((fp=fopen("test.txt", "w"))==NULL) {
printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");
exit(1);
}
fprintf (fp, "%s", tekst); /* zapisz nasz łańcuch w pliku */
fclose (fp); /* zamknij plik */
return 0;
}

 

Teraz omówimy najważniejsze elementy programu. Jak już było wspomniane wyżej, do identyfikacji pliku używa się wskaźnika na strukturę FILE (czyli FILE *). Funkcja fopen zwraca ów wskaźnik w przypadku poprawnego otwarcia pliku, bądź też NULL, gdy plik nie może zostać otwarty. Pierwszy argument funkcji to nazwa pliku, natomiast drugi to tryb dostępu — w oznacza “write” (pisanie); zwrócony “uchwyt” do pliku będzie mógł być wykorzystany jedynie w funkcjach zapisujących dane. I odwrotnie, gdy otworzymy plik podając tryb r (“read”, czytanie), będzie można z niego jedynie czytać dane.


Po zakończeniu korzystania z pliku należy plik zamknąć. Robi się to za pomocą funkcji fclose. Jeśli zapomnimy o zamknięciu pliku, wszystkie dokonane w nim zmiany zostaną utracone!

 

 

Zobacz nasze wszystkie kursy

WWW


HTML
HTML - Znaczniki
CSS - Tutorial
CSS - Selektory
PHP
JavaScript

XML

XSLT

Bazy danych


SQL
SQLite
MySQL
PostgreSQL

 

 

Programowanie


C
C++
C#
Java
VisualBasic
Python

Linux


Podstawy Linuxa
Bash
Linuks artykuły

Windows


Excel funkcje
Windows wskazówki
Outlook

Pozotałe działy


Programy
Rozrywka

 

 

 

This email address is being protected from spambots. You need JavaScript enabled to view it.