background image

Laboratorium nr 7 

1/5 

 

1) 

Pliki. 

 
Plik  (ang.  file),  jest  to  nazwany  ciąg  danych  (inaczej  zbiór  danych),  o  skończonej 

długości, posiadający szereg atrybutów i stanowiący dla systemu operacyjnego całość. 

Język C posiada w pliku nagłówkowym <stdio.h> zadeklarowane funkcje służące do 

obsługi  plików.  Funkcje  te  pozwalają  na  otwieranie,  tworzenie  oraz  modyfikację  różnych 

plików zarówno tekstowych (ASCII) jak i też binarnych. Podstawową strukturą opisującą plik 

(jako zbiór danych na dysku) jest typ danych „FILE” tzw. typ plikowy. Za pomocą wskaźnika 

na zmienną plikową możemy mieć  dostęp  do  pliku.  Deklaracja  wskaźnika  na  taką zmienną 

jest następująca: 

 

FILE *plik; 

 

2) 

Otwieranie pliku. 

 

Do  otworzenia  pliku  w  języku  C  służy  funkcja  fopen().  Funkcja  ta  przyjmuje  dwa 

parametry. Pierwszym argumentem jest nazwa pliku. Drugim natomiast atrybut, który określa 

w  jaki  sposób  ma  zostać  otworzony  plik  (atrybuty  można  ze  sobą  łączyć).  Funkcja  zwraca 

wskaźnik na zmienną plikową. 

 

[wskaźnik na zmienną plikową] = fopen(”nazwa pliku”,”atrybut”); 

 

Przykład: 

 

FILE *plik; 
plik = fopen(”dane.txt”,”r”); 
 

Nazwa  pliku  jest  to  bezpośrednia  nazwa  pliku  podana  w  cudzysłowach  ”  ”,  lub  z 

podaniem  katalogu.  Oprócz  bezpośredniej  nazwy  możemy  podać  też  tablicę  znaków 

(łańcuch) zawierający ścieżkę do pliku lub samą nazwę pliku. Atrybut określa w jaki sposób 

ma być otworzony plik lub też jakiego typu jest to plik. 

 

 

 

Język C 

Temat: Operacje na plikach. 

 

Instrukcja 

laboratoryjna 

Przygotował: mgr inż. Maciej Lasota 

background image

Laboratorium nr 7 

2/5 

 

• „r”  

- otwórz plik do odczytu, 

• „w”  

- otwórz plik do zapisu, jeśli plik istniej skasuj poprzednią zawartość, 

• „a”  

- dopisuj do pliku, ewentualnie utwórz plik z dopisywaniem do końca pliku, 

• „r+”  

- otwórz plik tekstowy do odczytu i zapisu, 

• „w+”   - utwórz plik tekstowy do aktualizacji skasuj plik jeśli istnieje, 

• „a+”   - dopisuj do pliku, ewentualnie utwórz plik do aktualizacji, 

• „b”  

- otwórz plik binarny. 

 

3) 

Odczyt danych z pliku. 

 

W języku C  wyróżniamy kilka sposobów służących do odczytu danych  z pliku. Dwie 

podstawowe funkcje służące do tego celu to fgetc() oraz fgets(). Funkcje te zadeklarowane 

są w pliku nagłówkowym <stdio.h>

 

fgetc(strumien)  –  funkcja  ta  odczytuj  pojedynczy  znak  z  pliku  i  zwraca  liczbę 

całkowitą (kod ASCII) odpowiadającą danemu znakowi.  

 

fgets(tablica,n,strumien)  –  funkcja  odczytuje  co  najwyżej  (n  –  1)  znaków  z  pliku  i 

wstawia je do podanej tablicy. 

 

Innym  sposobem  na  odczyt  danych  z  pliku,  jest  wykorzystanie  funkcji  konwersji 

Podobnie  jak  w  przypadku  wczytywania  danych  z  klawiatury  za  pomocą  scanf()  istnieje 

specjalna  wersja  przystosowana  do  wczytywania  danych  z  pliku.  Funkcją  tą  jest  fscanf() 

zadeklarowana jest ona w pliku nagłówkowym <stdio.h>

 

int fscanf(FILE *strumien, const char *format, ...); 

 

 

Przykład: 

 

#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char *argv[]) 

 

FILE *plik; 
int c; 

 
 

background image

Laboratorium nr 7 

3/5 

 

if(argc != 2) 

printf("Blad podaj nazwe pliku !!!\n"); 
exit(1); 


 
plik = fopen(argv[1],"r"); 
printf("Odczytuje zawartosc pliku: %s\n\n",argv[1]); 
 
if(plik == NULL) 

printf("Blad otwarcia pliku ...\n"); 
exit(1); 


while((c=fgetc(plik)) != EOF) 

printf("%c",c); 


 
printf("\n"); 
fclose(plik); 
 
return (0); 

 

4) 

Zapis danych do pliku. 

 

Również  w  przypadku  zapisu  danych  do  pliku,  wyróżniamy  kilka  rodzajów  funkcji 

służących do tego celu. 

 

fputc(c,strumien) – funkcja ta zapisuje pojedynczy znak „c” do pliku. 

 

fputs(tablica,strumien) – funkcja ta zapisuje tekst zawarty w tablicy do pliku. 

 

Podobnie  do  funkcji  printf()  istniej  również  funkcja  konwersji  służąca  do  zapisu 

danych do pliku, jest nią funkcja fprintf()

 

int fprintf(FILE *strumien, const char *format, ...); 

 

Pierwszym  argumentem  funkcji  fprintf()  jest  wskaźnik  na  zmienną  plikową,  drugim 

tekst formatujący czyli stała znakowa. Znak procenta oznacza rozpoczęcie tzw. specyfikatora 

formatu. Specyfikator formatu pozwala na wprowadzenie  w jego miejsce wartości kolejnych 

argumentów funkcji printf() (wyjątek stanowi %%, który umożliwia wprowadzenie znaku „%”). 

Znak „\” w tekście formatującym umożliwia wprowadzenie tzw. znaków specjalnych. 

 

background image

Laboratorium nr 7 

4/5 

 

Przykład: 

 

#include <stdio.h> 
#include <stdlib.h> 
 
int main(int argc, char *argv[]) 

FILE *plik; 
int c; 

 
if(argc != 2) 

printf("Blad podaj nazwe pliku !!!\n"); 
exit(1); 


 
if((plik = fopen(argv[1],"a")) == NULL) 

printf("Blad otwarcia pliku ...\n"); 
exit(1); 


 
printf("Zapisuje do pliku: %s\n\n",argv[1]); 
 
while((c=getchar()) != '#') 

fputc((int)c,plik); 


 
fclose(plik); 
return (0); 

 

Przykład: 

 

#include <stdio.h> 
#include <stdlib.h> 
#define MAX 255 
 
int main(int argc, char *argv[]) 

FILE *plik; 
char linia[MAX]; 
int c,i; 

 
if(argc != 2) 

printf("Blad podaj nazwe pliku !!!\n"); 
exit(1); 


 
 
 

background image

Laboratorium nr 7 

5/5 

 

if((plik = fopen(argv[1],"a")) == NULL) 

printf("Blad otwarcia pliku ...\n"); 
exit(1); 


 
while(gets(linia) != NULL && linia[0] != '\0') 

fprintf(plik,"%s\n",linia); 


 
fclose(plik); 
return (0); 

 

5) 

Zamknięcie pliku. 

 

Ważnym  elementem  w przypadku  obsługi  plików  jest każdorazowe  zamknięcie  pliku 

po  wykonaniu  na  nim  operacji  (zapisu  lub  odczytu).  Do  tego  celu  służy  funkcja  fclose()

Funkcja ta przyjmuje jeden parametr jest nim wskaźnik na zmienną plikową. 

 

int fclose(FILE *strumien); 

 

Przykład: 

 

FILE *plik; 
plik = fopen(”test.txt”,”r”); 
... 
... 
... 
fclose(plik);