Práca so súbormy

Definícia súboru

  • Súbory sú používané na ukladanie a manipuláciu s dátami.
  • Príklad: FILE *subor;

Otvorenie a zatvorenie súborov

  • Otvorenie súboru na čítanie:

subor = fopen("subor.txt", "r");

  • Otvorenie súboru na zápis: 

subor = fopen("subor.txt", "w");

  • Zatvorenie súboru: 

fclose(subor);


Čítanie a zapisovanie do súborov

Čítanie zo súboru

  • Príklad čítania celého riadku:

Zapisovanie do súboru

  • Príklad zapisovania textu:

char riadok[100];

while (fgets(riadok, sizeof(riadok), subor) != NULL) {

      printf("%s", riadok); 

}


fprintf(subor, "Toto je text, ktorý sa zapíše do súboru.\n");


Práca so štruktúrami v súboroch

Práca so štruktúrami v súboroch umožňuje ukladať a načítavať zložitejšie dáta, napríklad záznamy alebo objekty, a to vo forme binárnych blokov. Tu sú niektoré hlavné pojmy:

  • Štruktúra: Predstavuje definíciu dátového typu, ktorý môže obsahovať rôzne dátové prvky, napríklad rôzne premenné rôznych typov.

struct Osoba {

      char meno[30];

      int vek; 

};


  • Zápis do súboru: Používa sa funkcia fwrite(), ktorá umožňuje zapisovať dáta štruktúry (alebo iných dátových typov) do súboru. 

struct Osoba osoba1;

strcpy(osoba1.meno, "Peter");

osoba1.vek = 25;


fwrite(&osoba1, sizeof(struct Osoba), 1, subor);


  • Čítanie zo súboru: Načítavanie dát zo súboru používa funkciu fread(). Musíte poznať štruktúru dát, ktoré budete načítavať. 

struct Osoba osoba2;

fread(&osoba2, sizeof(struct Osoba), 1, subor);


Textové a binárne súbory

Pri práci so súbormi v jazyku C je možné použiť textové aj binárne súbory, pričom každý má svoje výhody a nevýhody:

  • Textové súbory:

    • Dáta sú uložené v textovej forme, ktorá je ľahko čitateľná pre človeka.

    • Príklad čítania a zapisovania textu:

  • Binárne súbory:
  • Dáta sú uložené v binárnej forme, ktorá je efektívnejšia pre ukladanie štruktúr a komplexných dátových štruktúr.
  • Príklad čítania a zapisovania binárnych dát:

fprintf(subor, "Toto je textový súbor.\n");


int cislo = 42;

fwrite(&cislo, sizeof(int), 1, subor);


Spracovanie chýb a výnimiek

Pri práci so súbormi je dôležité vedieť, ako správne spracovávať chyby a výnimky, ktoré môžu nastať. Tieto kroky sú zvyčajne súčasťou dobrej praxe:

  • Kontrola návratových hodnôt: Všetky funkcie, ktoré pracujú so súbormi, vrátia hodnotu, ktorá indikuje úspech alebo chybu operácie. Túto hodnotu by ste mali vždy skontrolovať.

  • Správa chýb: Ak nastane chyba, je vhodné informovať o tom používateľa a/alebo zalogovať chybu pre neskoršie ladenie. 

FILE *subor = fopen("subor.txt", "r");

if (subor == NULL) {

    perror("Chyba pri otváraní súboru");

    return 1;

}


perror("Chyba pri otváraní súboru");



Príklad:

Napíšte program, ktorý umožní používateľovi zadať text a uložiť ho do textového súboru. Následne program načíta tento súbor a vypíše jeho obsah na obrazovku.

#include <stdio.h>


int main() {

// Zápis do súboru

FILE *subor;

subor = fopen("textovy_subor.txt", "w");

if (subor == NULL) {

perror("Chyba pri otváraní súboru");

return 1;

}


fprintf(subor, "Toto je textový súbor.\n");

fclose(subor);


// Čítanie zo súboru

subor = fopen("textovy_subor.txt", "r");

if (subor == NULL) {

perror("Chyba pri otváraní súboru");

return 1;

}


char riadok[100];

while (fgets(riadok, sizeof(riadok), subor) != NULL) {

printf("%s", riadok);

}


fclose(subor);

return 0;

}

Príklad
Príklad
vytvoril sa textový súbor
vytvoril sa textový súbor

Úloha číslo 1: Vytvorte štruktúru reprezentujúcu osobu (napríklad s poliami pre meno a vek). Program by mal umožniť používateľovi vložiť údaje o osobe a uložiť ich do binárneho súboru. Potom by mal byť schopný načítať tieto údaje zo súboru a vypísať ich na obrazovku.

#include <stdio.h>

#include <string.h>


struct Osoba {

char meno[30];

int vek;

};


int main() {

FILE *subor;

subor = fopen("osoba.dat", "wb");

if (subor == NULL) {

perror("Chyba pri otváraní súboru");

return 1;

}


struct Osoba osoba1;

strcpy(osoba1.meno, "Peter");

osoba1.vek = 25;


fwrite(&osoba1, sizeof(struct Osoba), 1, subor);

fclose(subor);


subor = fopen("osoba.dat", "rb");

if (subor == NULL) {

perror("Chyba pri otváraní súboru");

return 1;

}


struct Osoba osoba2;

fread(&osoba2, sizeof(struct Osoba), 1, subor);

printf("Meno: %s, Vek: %d\n", osoba2.meno, osoba2.vek);


fclose(subor);

return 0;

}

úloha 1
úloha 1

Úloha číslo 2: Napíšte program, ktorý skopíruje obsah jedného textového súboru do druhého. Používateľ by mal mať možnosť zadať názvy vstupného a výstupného súboru.

#include <stdio.h>


int main() {


FILE *vstupny_subor, *vystupny_subor;

vstupny_subor = fopen("vstup.txt", "r");

vystupny_subor = fopen("vystup.txt", "w");


if (vstupny_subor == NULL || vystupny_subor == NULL) {

perror("Chyba pri otváraní súborov");

return 1;

}


char znak;

while ((znak = fgetc(vstupny_subor)) != EOF) {

fputc(znak, vystupny_subor);

}


fclose(vstupny_subor);

fclose(vystupny_subor);


return 0;

}

vstup úloha 2
vstup úloha 2
výstup pred spustením úloha 2
výstup pred spustením úloha 2
výstup po spustení úloha 2
výstup po spustení úloha 2

Úloha číslo 3: Vytvorte program, ktorý umožní používateľovi zadať reťazec a uložiť ho do textového súboru. Následne program načíta tento súbor a vypíše jeho obsah na obrazovku.

#include <stdio.h>


int main() {

FILE *subor;

subor = fopen("retazec.txt", "w");

if (subor == NULL) {

perror("Chyba pri otváraní súboru");

return 1;

}


char retazec[100];

printf("Zadajte reťazec: ");

fgets(retazec, sizeof(retazec), stdin);


fprintf(subor, "%s", retazec);

fclose(subor);


subor = fopen("retazec.txt", "r");

if (subor == NULL) {

perror("Chyba pri otváraní súboru");

return 1;

}


while (fgets(retazec, sizeof(retazec), subor) != NULL) {

printf("Načítaný reťazec: %s", retazec);

}


fclose(subor);

return 0;

}
úloha 3
úloha 3

Úloha 4: Napíšte program, ktorý načíta čísla zo súboru s názvom "cisla.txt", spočíta ich priemer a vypíše ho na obrazovku.

#include <stdio.h>

int main() {


FILE *subor;

subor = fopen("cisla.txt", "r");

if (subor == NULL) {

perror("Chyba pri otváraní súboru");

return 1;

}

int cislo;

int pocet = 0;

int suma = 0;


while (fscanf(subor, "%d", &cislo) == 1) {

pocet++;

suma += cislo;

}


fclose(subor);


double priemer = (double)suma / pocet;


printf("Priemer čísel zo súboru: %.2lf\n", priemer);

return 0;

}
výsledok úloha 4
výsledok úloha 4
súbor s číslami úloha 4
súbor s číslami úloha 4
Vytvorte si webové stránky zdarma! Táto stránka bola vytvorená pomocou služby Webnode. Vytvorte si vlastný web zdarma ešte dnes! Vytvoriť stránky
Používame cookies, aby sme zaistili správne fungovanie a bezpečnosť našich stránok. Tým vám môžeme poskytnúť tú najlepšiu skúsenosť z ich návštevy.

Pokročilé nastavenia

Tu môžete upraviť svoje preferencie ohľadom cookies. Nasledujúce kategórie môžete povoliť či zakázať a svoj výber uložiť.