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

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(6 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 2: Riadok 2:
 
[[Kategória:Informatika]]
 
[[Kategória:Informatika]]
 
{{Skripta_ZI}}
 
{{Skripta_ZI}}
 +
__TOC__
  
 
==Súbory==
 
==Súbory==
Riadok 51: Riadok 52:
 
! Funckia !! Popis
 
! Funckia !! Popis
 
|-
 
|-
| [[fopen]]() || Vytvorí nový súbor, alebo otvorí existujúci súbor.
+
| [[Fopen (jazyk C)|fopen]]() || Vytvorí nový súbor, alebo otvorí existujúci súbor.
 
|-
 
|-
| [[fclose]]() || Zatvorí otvorený súbor.
+
| [[Fclose (jazyk C)|fclose]]() || Zatvorí otvorený súbor.
 
|-
 
|-
| [[getw]]() || Načíta celé číslo zo súboru.
+
| [[Getw (jazyk C)|getw]]() || Načíta celé číslo zo súboru.
 
|-
 
|-
| [[putw]]() || Zapíše celé číslo do súboru
+
| [[Putw (jazyk C)|putw]]() || Zapíše celé číslo do súboru
 
|-
 
|-
| [[fgetc]]() || Načíta jeden znak zo súboru.
+
| [[Fgetc (jazyk C)|fgetc]]() || Načíta jeden znak zo súboru.
 
|-
 
|-
| [[fputc]]() || Zapíše jeden znak do súboru.
+
| [[Fputc (jazyk C)|fputc]]() || Zapíše jeden znak do súboru.
 
|-
 
|-
| [[gets]]() || Načíta jeden riadok z klávesnice (''stdin'').
+
| [[Gets (jazyk C)|gets]]() || Načíta jeden riadok z klávesnice (''stdin'').
 
|-
 
|-
| [[puts]]() || Vypíše jeden riadok na monitor (''stdout'').
+
| [[Puts (jazyk C)|puts]]() || Vypíše jeden riadok na monitor (''stdout'').
 
|-
 
|-
| [[fgets]]() || Načíta reťazec zo súboru, jeden riadok naraz.
+
| [[Fgets (jazyk C)|fgets]]() || Načíta reťazec zo súboru, jeden riadok naraz.
 
|-
 
|-
| [[fputs]]() || Zapíše reťazec do súboru.
+
| [[Fputs (jazyk C)|fputs]]() || Zapíše reťazec do súboru.
 
|-
 
|-
| [[feof]]() || Kontroluje koniec súboru.
+
| [[Feof (jazyk C)|feof]]() || Kontroluje koniec súboru.
 
|-
 
|-
| [[fgetchar]]() || Načíta znak z klávesnice (''stdin'').
+
| [[Fgetchar (jazyk C)|fgetchar]]() || Načíta znak z klávesnice (''stdin'').
 
|-
 
|-
| [[fprintf]]() || Zapíše formátované dáta do súboru.
+
| [[Fprintf (jazyk C)|fprintf]]() || Zapíše formátované dáta do súboru.
 
|-
 
|-
| [[fscanf]]() || Prečíta formátované dáta zo súboru.
+
| [[Fscanf (jazyk C)|fscanf]]() || Prečíta formátované dáta zo súboru.
 
|-
 
|-
| [[fputchar]]() || Na obrazovku (''stdout'') vypíše znak načítaný z klávesnice (''stdin'').
+
| [[Fputchar (jazyk C)|fputchar]]() || Na obrazovku (''stdout'') vypíše znak načítaný z klávesnice (''stdin'').
 
|-
 
|-
| [[fseek]]() || Posunie pomyselný kurzor v súbore na určité miesto.
+
| [[Fseek (jazyk C)|fseek]]() || Posunie kurzor v súbore na určité miesto.
 
|-
 
|-
| SEEK_SET || Posunie pomyselný kurzor na začiatok súboru.
+
| SEEK_SET || Posunie kurzor na začiatok súboru.
 
|-
 
|-
| SEEK_CUR || Posunie pomyselný kurzor na na presne určené miesto.
+
| SEEK_CUR || Posunie kurzor na presne určené miesto.
 
|-
 
|-
| SEEK_END || Posunie pomyselný kurzor na koniec súboru.
+
| SEEK_END || Posunie kurzor na koniec súboru.
 
|-
 
|-
| [[ftell]]() || Vráti aktuálnu pozíciu pomyselného kurzora v súbore.
+
| [[Ftell (jazyk C)|ftell]]() || Vráti aktuálnu pozíciu kurzora v súbore.
 
|-
 
|-
| [[rewind]]() || Posunie pomyselný kurzor na začiatok súboru.
+
| [[Rewind (jazyk C)|rewind]]() || Posunie kurzor na začiatok súboru.
 
|-
 
|-
| [[getc]]() || Načíta znak zo súboru.
+
| [[Getc (jazyk C)|getc]]() || Načíta znak zo súboru.
 
|-
 
|-
| [[getch]]() || Načíta znak z klávesnice (''stdin'') aj bez stlačenia tlačidla enter.
+
| [[Getch (jazyk C)|getch]]() || Načíta znak z klávesnice (''stdin'') aj bez stlačenia tlačidla enter.
 
|-
 
|-
| [[getche]]() || Zobrazí znak z klávesnice (''stdin'') na obrazovke (''stdout'') aj bez stlačenia tlačidla enter.
+
| [[Getche (jazyk C)|getche]]() || Zobrazí znak z klávesnice (''stdin'') na obrazovke (''stdout'') aj bez stlačenia tlačidla enter.
 
|-
 
|-
| [[getchar]]() || Načíta znak z klávesnice (''stdin'').
+
| [[Getchar (jazyk C)|getchar]]() || Načíta znak z klávesnice (''stdin'').
 
|-
 
|-
| [[putc]]() || Zapíše znak do súboru.
+
| [[Putc (jazyk C)|putc]]() || Zapíše znak do súboru.
 
|-
 
|-
| [[putchar]]() || Vypíše znak na monitor (''stdout'').
+
| [[Putchar (jazyk C)|putchar]]() || Vypíše znak na monitor (''stdout'').
 
|-
 
|-
| [[printf]]() || Vypíše formátované dáta na monitor (''stdout'').
+
| [[Printf (jazyk C)|printf]]() || Vypíše formátované dáta na monitor (''stdout'').
 
|-
 
|-
| [[sprintf]]() || Uloží formátované dáta do textového reťazcu.
+
| [[Sprintf (jazyk C)|sprintf]]() || Uloží formátované dáta do textového reťazcu.
 
|-
 
|-
| [[scanf]]() || Načíta formátované dáta z klávesnice (''stdout'').
+
| [[Scanf (jazyk C)|scanf]]() || Načíta formátované dáta z klávesnice (''stdout'').
 
|-
 
|-
| [[sscanf]]() || Načíta formátované dáta z textového reťazcu.
+
| [[Sscanf (jazyk C)|sscanf]]() || Načíta formátované dáta z textového reťazcu.
 
|-
 
|-
| [[remove]]() || Odstráni súbor.
+
| [[Remove (jazyk C)|remove]]() || Odstráni súbor.
 
|-
 
|-
| [[fflush]]() || Vyčistí súbor.
+
| [[Fflush (jazyk C)|fflush]]() || Vyčistí súbor.
 
|}
 
|}
  
 
==Príklad==
 
==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]]). V príklade je použitá funkcia [[rewind]], ktorá vráti pomyselný kurzor na začiatok súboru. Pred spustením tohoto príkladu je potrebné si zmeniť cestu súboru, podľa toho, kde chcete súbor vytvoriť.
+
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 (jazyk C)|fprintf]]() a [[Fputc (jazyk C)|fputc]]()/ [[Fscanf (jazyk C)|fscanf]]() a [[Fgetc (jazyk C)|fgetc]]()). V príklade je použitá funkcia [[Rewind (jazyk C)|rewind]](), ktorá vráti kurzor na začiatok súboru. 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>
 
<source lang="c" line>
Riadok 127: Riadok 128:
 
int main()
 
int main()
 
{
 
{
  //otvorenie súboru: musíme zadať cestu k súboru, a potom spôsob akým ho chceme otvoriť
+
    //otvorenie súboru: musíme zadať cestu k súboru, a potom spôsob akým ho chceme otvoriť
  //V ceste k súboru musia byť opačné lomítka zdvojené, pretože jedno lomítko spolu s dalším znakom označuje špeciálne znaky
+
    //V ceste k súboru musia byť opačné lomítka zdvojené, pretože jedno lomítko spolu s ďalším znakom označuje špeciálne znaky
  //napr. \n je znak new line
+
    //napr. \n je znak new line
  FILE *subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "w");
+
    FILE *subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "w");
  
  //overenie, či sa súbor otvoril
+
    //overenie, či sa súbor otvoril
  if (subor) {
+
    if (subor) {
    printf("CHYBA: subor sa neotvoril!");
+
        printf("CHYBA: subor sa neotvoril!");
    return 0;
+
        return 0;
  }
+
    }
  
  //namiesto printf pri zapisovaní do súborov používame funkciu fprintf
+
    //namiesto printf pri zapisovaní do súborov používame funkciu fprintf
  fprintf(subor, "Toto je prvy riadok\n"); //zapísanie prvého riadku do súboru
+
    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
+
    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
+
    //načítanie vstupu z klávesnice, a zapísanie do súboru
  char text[100];
+
    char text[100];
  printf("Zadajte slovo, ktore bude zapisane do suboru: ");
+
    printf("Zadajte slovo, ktore bude zapisane do suboru: ");
  scanf("%s", text);
+
    scanf("%s", text);
  fprintf(subor, "%s", text);
+
    fprintf(subor, "%s", text);
  
  fputc('S', subor); //zapísanie len jedného znaku (char) do súboru
+
    fputc('S', subor);         //zapísanie len jedného znaku (char) do súboru
  
  fclose(subor); //zatvorenie 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 jedného slova zo súboru
 +
    printf("%s ", text);        //vypísanie daného slova
 +
 +
    printf("\n");
 +
    rewind(subor);              //vrátenie sa na začiatok súboru
  
  //Otvorenie súboru pre čítanie
+
    //čítanie zo súboru po znakoch, čítanie sa zastaví, ak funkcie fgets vráti EOF, čiže koniec súboru
  subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "r");
+
    int znak = 0;
 +
    while ((znak = fgetc(subor)) != EOF) {
 +
        printf("%c", znak);
 +
    }
  
  //overenie, či sa súbor otvoril
 
  if (subor) {
 
    printf("CHYBA: subor sa neotvoril!");
 
 
     return 0;
 
     return 0;
  }
 
 
  //namiesto funkcie scnaf používame pri súboroch funkciu fscanf
 
  fscanf(subor, "%s", text); //načítanie jedného 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>
 
</source>
  
==Zdroje==
+
==Referencie==

Aktuálna revízia z 15:51, 26. máj 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

Pre prácu so súbormi v jazyku C musíme mať zahrnutú knižnicu stdio.h. Ak ste si všimli, tak táto knižnica sa zahŕňa aj pri funkciách, ktoré buď vypisujú na monitor, alebo čítajú z klávesnice. Je to preto, pretože tieto funkcie vlastne len čítajú zo súborov alebo zapisujú do súborov, ktoré sú určené pre vstup z klávesnice a výstup na monitor.

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 režim, v ktorom bude súbor otvorený. Režimy 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.

Režim Popis
r Otvorí súbor len pre čítanie.
w Otvorí súbor pre zapisovanie. Ak neexistuje, tak vytvorí nový súbor. V tomto režime 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 režime 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ý.

[1]

Ak chcete otvoriť binárne súbory, musíte použiť nasledovné režimy:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

Funkcie na prácu so súbormi

Funckia Popis
fopen() Vytvorí nový súbor, alebo otvorí existujúci súbor.
fclose() Zatvorí otvorený súbor.
getw() Načíta celé číslo zo súboru.
putw() Zapíše celé číslo do súboru
fgetc() Načíta jeden znak zo súboru.
fputc() Zapíše jeden znak do súboru.
gets() Načíta jeden riadok z klávesnice (stdin).
puts() Vypíše jeden riadok na monitor (stdout).
fgets() Načíta reťazec zo súboru, jeden riadok naraz.
fputs() Zapíše reťazec do súboru.
feof() Kontroluje koniec súboru.
fgetchar() Načíta znak z klávesnice (stdin).
fprintf() Zapíše formátované dáta do súboru.
fscanf() Prečíta formátované dáta zo súboru.
fputchar() Na obrazovku (stdout) vypíše znak načítaný z klávesnice (stdin).
fseek() Posunie kurzor v súbore na určité miesto.
SEEK_SET Posunie kurzor na začiatok súboru.
SEEK_CUR Posunie kurzor na presne určené miesto.
SEEK_END Posunie kurzor na koniec súboru.
ftell() Vráti aktuálnu pozíciu kurzora v súbore.
rewind() Posunie kurzor na začiatok súboru.
getc() Načíta znak zo súboru.
getch() Načíta znak z klávesnice (stdin) aj bez stlačenia tlačidla enter.
getche() Zobrazí znak z klávesnice (stdin) na obrazovke (stdout) aj bez stlačenia tlačidla enter.
getchar() Načíta znak z klávesnice (stdin).
putc() Zapíše znak do súboru.
putchar() Vypíše znak na monitor (stdout).
printf() Vypíše formátované dáta na monitor (stdout).
sprintf() Uloží formátované dáta do textového reťazcu.
scanf() Načíta formátované dáta z klávesnice (stdout).
sscanf() Načíta formátované dáta z textového reťazcu.
remove() Odstráni súbor.
fflush() Vyčistí súbor.

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()). V príklade je použitá funkcia rewind(), ktorá vráti kurzor na začiatok súboru. 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 otvoriť
 6     //V ceste k súboru musia byť opačné lomítka zdvojené, pretože jedno lomítko spolu s ďalší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úborov 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 jedného znaku (char) do súboru
27 
28     fclose(subor);             //zatvorenie súboru
29 
30 
31     //Otvorenie súboru pre čítanie
32     subor = fopen("C:\\Users\\USER\\Documents\\subor.txt", "r");
33 
34     //overenie, či sa súbor otvoril
35     if (subor) {
36         printf("CHYBA: subor sa neotvoril!");
37         return 0;
38     }
39 
40     //namiesto funkcie scnaf používame pri súboroch funkciu fscanf
41     fscanf(subor, "%s", text);  //načítanie jedného slova zo súboru
42     printf("%s ", text);        //vypísanie daného slova
43 	
44     printf("\n");
45     rewind(subor);              //vrátenie sa na začiatok súboru
46 
47     //čítanie zo súboru po znakoch, čítanie sa zastaví, ak funkcie fgets vráti EOF, čiže koniec súboru
48     int znak = 0;
49     while ((znak = fgetc(subor)) != EOF) {
50         printf("%c", znak);
51     }
52 
53     return 0;
54 }

Referencie