Jazyk C - súbory: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 21: Riadok 21:
 
*FILENAME_MAX  maximálna dĺžka názvu súboru
 
*FILENAME_MAX  maximálna dĺžka názvu súboru
 
*TMP_MAX maximálny počet súčasne otvorených pracovných prúdov
 
*TMP_MAX maximálny počet súčasne otvorených pracovných prúdov
 +
 +
==Otvorenie súboru==
 +
 +
Na otvorenie súboru slúži funkcia ''fopen'', ktorá má dva parametre. Prvý parameter určuje miesto (path) kde je súbor uložený, vrátane názvu a prípony súboru, druhý parameter určuje mód, v ktorom bude súbor otvorený. Módy pre textové súbory sú v tabuľke nižšie. Funkcia ''fopen'' vráti adresu súboru. Po zavolaní funkcie ''fopen'' treba overiť, či ukazovateľ na súbor nie je ''NULL'', čiže či súbor existuje.
 +
{| class="wikitable"
 +
|-
 +
! Mód !! Popis
 +
|-
 +
| r || Otvorí súbor len pre čítanie.
 +
|-
 +
| w || Otvorí súbor pre zapisovanie. Ak neexistuje, tak vytvorí nový súbor. V tomto móde sa začne zapisovať na začiatku súboru.
 +
|-
 +
| a || Otvorí súbor pre zapisovanie s funkciou pripájania. Ak neexistuje, tak vytvorí nový súbor. V tomto móde sa začne pripájať text na koniec súboru.
 +
|-
 +
| r+ || Otvorí súbor aj pre čítanie aj pre zapisovanie.
 +
|-
 +
| w+ || Otvorí súbor aj pre čítanie aj pre zapisovanie. Ako prvé vymaže dáta zo súboru, ak existujú, inak vytvorí nový súbor.
 +
|-
 +
| a+ || Otvorí súbor aj pre čítanie aj pre zapisovanie. Ak neexistuje, tak vytvorí nový súbor. Čítanie začne od začiatku, ale zapisovaný text môže byť len pripájaný.
 +
|}
 +
 +
==Príklad==
 +
 +
Tento príklad zobrazuje, ako zapisovať a čítať zo súboru. Pre čítanie alebo zapisovanie sú zobrazené dva možné spôsoby zápisu (fprintf a fputc/ fscanf a fgetc). Pred spustením tohoto príkladu je potrebné si zmeniť cestu súboru, podľa toho, kde chcete súbor vytvoriť.
 +
 +
<source lang="c" line>
 +
#include <stdio.h>
 +
 +
int main()
 +
{
 +
  //otvorenie súboru: musíme zadať cestu k súboru, a potom spôsob akým ho chceme otvóriť
 +
  //V ceste k súboru musia byť opačné lomítka zdvojené, pretože jedno lomítko spolu s daľším znakom označuje špeciálne znaky
 +
  //napr. \n je znak new line
 +
  FILE *subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "w");
 +
 +
  //overenie, či sa súbor otvoril
 +
  if (subor) {
 +
    printf("CHYBA: subor sa neotvoril!");
 +
    return 0;
 +
  }
 +
 +
  //namiesto printf pri zapisovaní do súborou používame funkciu fprintf
 +
  fprintf(subor, "Toto je prvy riadok\n"); //zapísanie prvého riadku do súboru
 +
  fprintf(subor, "Toto je druhy riadok\n"); //zapísanie druhého riadku do súboru
 +
 +
  //načítanie vstupu z klávesnice, a zapísanie do súboru
 +
  char text[100];
 +
  printf("Zadajte slovo, ktore bude zapisane do suboru: ");
 +
  scanf("%s", text);
 +
  fprintf(subor, "%s", text);
 +
 +
  fputc('S', subor); //zapísanie len jednoho znaku (char) do súboru
 +
 +
  fclose(subor); //zatvorenie súboru
 +
 +
 +
 +
 +
 +
  //Otvorenie súboru pre čítanie
 +
  subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "r");
 +
 +
  //overenie, či sa súbor otvoril
 +
  if (subor) {
 +
    printf("CHYBA: subor sa neotvoril!");
 +
    return 0;
 +
  }
 +
 +
  //namiesto funkcie scnaf používame pri súboroch funkciu fscanf
 +
  fscanf(subor, "%s", text); //načítanie jednoho slova zo súboru
 +
  printf("%s ", text); //vypísanie daného slova
 +
 +
  printf("\n");
 +
  rewind(subor); //vrátenie sa na začiatok súboru
 +
 +
  //čítanie zo súboru po charakteroch, čítanie sa zastaví, ak funkcie fgets vráti EOF, čiže koniec súboru
 +
  int charakter = 0;
 +
  while ((charakter = fgetc(subor)) != EOF) {
 +
    printf("%c", charakter);
 +
}
 +
 +
  return 0;
 +
}
 +
 +
</source>

Verzia zo dňa a času 11:42, 7. apríl 2020


Súbory

Súbor predstavuje postupnosť bajtov bez ohľadu na to, či ide o textový súbor alebo binárny súbor. Programovací jazyk C poskytuje prístup k funkciám na vysokej úrovni, ako aj k volaniam na nízkej úrovni (na úrovni OS) na spracúvanie súborov na pamäťových zariadeniach. Okrem práce so štandardnými vstupnými a výstupnými zariadeniami je možné vykonávať zápis a čítanie informácií zo súborov. Táto činnosť je podporovaná dvoma skupinami štandardných funkcií pre dve úrovne práce so súbormi. Nižšiu úroveň reprezentuje skupina funkcií, ktoré priamo využívajú služby operačného systému. Celú réžiu s tým spojenú musí zabezpečovať samotný program. Vyššiu úroveň predstavuje práca s prúdmi (stream) údajov. Táto úroveň sa používa najčastejšie a je užívateľsky prijateľnejšia ako prv spomínaná nižšia úroveň.

Každá činnosť spojená s komunikáciou so súborom môže pozostávať z týchto krokov :

  • otvorenie súboru
  • manipulácia so súborom (čítanie, zápis, nastavenie)
  • zatvorenie súboru

Pri práci so súbormi sa stretávame s niektorými preddefinovanými konštantami :

  • EOF koniec súboru
  • FOPEN_MAX maximálny počet súčasne otvorených súborov
  • FILENAME_MAX maximálna dĺžka názvu súboru
  • TMP_MAX maximálny počet súčasne otvorených pracovných prúdov

Otvorenie súboru

Na otvorenie súboru slúži funkcia fopen, ktorá má dva parametre. Prvý parameter určuje miesto (path) kde je súbor uložený, vrátane názvu a prípony súboru, druhý parameter určuje mód, v ktorom bude súbor otvorený. Módy pre textové súbory sú v tabuľke nižšie. Funkcia fopen vráti adresu súboru. Po zavolaní funkcie fopen treba overiť, či ukazovateľ na súbor nie je NULL, čiže či súbor existuje.

Mód Popis
r Otvorí súbor len pre čítanie.
w Otvorí súbor pre zapisovanie. Ak neexistuje, tak vytvorí nový súbor. V tomto móde sa začne zapisovať na začiatku súboru.
a Otvorí súbor pre zapisovanie s funkciou pripájania. Ak neexistuje, tak vytvorí nový súbor. V tomto móde sa začne pripájať text na koniec súboru.
r+ Otvorí súbor aj pre čítanie aj pre zapisovanie.
w+ Otvorí súbor aj pre čítanie aj pre zapisovanie. Ako prvé vymaže dáta zo súboru, ak existujú, inak vytvorí nový súbor.
a+ Otvorí súbor aj pre čítanie aj pre zapisovanie. Ak neexistuje, tak vytvorí nový súbor. Čítanie začne od začiatku, ale zapisovaný text môže byť len pripájaný.

Príklad

Tento príklad zobrazuje, ako zapisovať a čítať zo súboru. Pre čítanie alebo zapisovanie sú zobrazené dva možné spôsoby zápisu (fprintf a fputc/ fscanf a fgetc). Pred spustením tohoto príkladu je potrebné si zmeniť cestu súboru, podľa toho, kde chcete súbor vytvoriť.

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5   //otvorenie súboru: musíme zadať cestu k súboru, a potom spôsob akým ho chceme otvóriť
 6   //V ceste k súboru musia byť opačné lomítka zdvojené, pretože jedno lomítko spolu s daľším znakom označuje špeciálne znaky
 7   //napr. \n je znak new line
 8   FILE *subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "w");
 9 
10   //overenie, či sa súbor otvoril
11   if (subor) {
12     printf("CHYBA: subor sa neotvoril!");
13     return 0;
14   }
15 
16   //namiesto printf pri zapisovaní do súborou používame funkciu fprintf
17   fprintf(subor, "Toto je prvy riadok\n"); //zapísanie prvého riadku do súboru
18   fprintf(subor, "Toto je druhy riadok\n"); //zapísanie druhého riadku do súboru
19 
20   //načítanie vstupu z klávesnice, a zapísanie do súboru
21   char text[100];
22   printf("Zadajte slovo, ktore bude zapisane do suboru: ");
23   scanf("%s", text);
24   fprintf(subor, "%s", text);
25 
26   fputc('S', subor); //zapísanie len jednoho znaku (char) do súboru
27 
28   fclose(subor); //zatvorenie súboru
29 
30 
31 
32 
33 
34   //Otvorenie súboru pre čítanie
35   subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "r");
36 
37   //overenie, či sa súbor otvoril
38   if (subor) {
39     printf("CHYBA: subor sa neotvoril!");
40     return 0;
41   }
42 
43   //namiesto funkcie scnaf používame pri súboroch funkciu fscanf
44   fscanf(subor, "%s", text); //načítanie jednoho slova zo súboru
45   printf("%s ", text); //vypísanie daného slova
46 	
47   printf("\n");
48   rewind(subor); //vrátenie sa na začiatok súboru
49 
50   //čítanie zo súboru po charakteroch, čítanie sa zastaví, ak funkcie fgets vráti EOF, čiže koniec súboru
51   int charakter = 0;
52   while ((charakter = fgetc(subor)) != EOF) {
53     printf("%c", charakter);
54 }
55 
56   return 0;
57 }