Odovzdávanie súborov v C je proces, v ktorom vytvárame, otvárame, čítame, zapisujeme a zatvárame operácie so súborom. Jazyk C poskytuje rôzne funkcie ako fopen(), fwrite(), fread(), fseek(), fprintf() atď. na vykonávanie vstupu, výstupu a mnohých rôznych operácií so súbormi C v našom programe.
Prečo potrebujeme prácu so súbormi v C?
Zatiaľ sa operácie pomocou programu C vykonávajú na príkazovom riadku/terminále, ktorý nie je nikde uložený. Výstup sa vymaže po zatvorení programu. Ale v softvérovom priemysle je väčšina programov napísaná na ukladanie informácií získaných z programu. Využitie spracovania súborov je presne to, čo si situácia vyžaduje.
Aby sme pochopili, prečo je práca so súbormi dôležitá, pozrime sa na niekoľko funkcií používania súborov:
- Opätovná použiteľnosť: K údajom uloženým v súbore je možné pristupovať, aktualizovať a kedykoľvek vymazať, čím sa zabezpečí vysoká znovupoužiteľnosť.
- Prenosnosť: Bez straty údajov je možné súbory preniesť do iného v počítačovom systéme. Riziko chybného kódovania je vďaka tejto funkcii minimalizované.
- Efektívne: Niektoré programy môžu vyžadovať veľké množstvo vstupu. Manipulácia so súbormi vám umožňuje jednoduchý prístup k časti súboru pomocou niekoľkých pokynov, čo šetrí veľa času a znižuje riziko chýb.
- Úložná kapacita: Súbory vám umožňujú ukladať veľké množstvo údajov bez toho, aby ste sa museli starať o súčasné ukladanie všetkého v programe.
Typy súborov v C
Súbor možno rozdeliť do dvoch typov podľa spôsobu, akým súbor ukladá údaje. Sú nasledovné:
- Textové súbory
- Binárne súbory
diagram modelu e-r
1. Textové súbory
Textový súbor obsahuje údaje v vo forme ASCII znakov a vo všeobecnosti sa používa na ukladanie prúdu znakov.
- Každý riadok v textovom súbore končí znakom nového riadku („ “).
- Dá sa čítať alebo písať v akomkoľvek textovom editore.
- Vo všeobecnosti sú uložené s .TXT rozšírenie súboru.
- Na uloženie zdrojového kódu možno použiť aj textové súbory.
2. Binárne súbory
Binárny súbor obsahuje údaje v binárna forma (t.j. 0 a 1) namiesto znakov ASCII. Obsahujú dáta, ktoré sú uložené podobným spôsobom, ako sú uložené v hlavnej pamäti.
- Binárne súbory môžu byť vytvorené iba v rámci programu a ich obsah môže čítať iba program.
- Bezpečnejšie, pretože nie sú ľahko čitateľné.
- Vo všeobecnosti sú uložené s .bin rozšírenie súboru.
Operácie so súbormi C
Operácie so súbormi C sa týkajú rôznych možných operácií, ktoré môžeme vykonať so súborom v C, ako napríklad:
- Vytvorenie nového súboru - fopen() s atribútmi ako a alebo a+ alebo w alebo w+
- Otvorenie existujúceho súboru - fopen()
- Čítanie zo súboru - fscanf() alebo fgets()
- Zápis do súboru - fprintf() alebo fputs()
- Presun na konkrétne miesto v súbore – fseek() , pretočiť ()
- Zatvorenie súboru - fclose()
Zvýraznený text uvádza funkciu C používanú na vykonávanie operácií so súbormi.
Funkcie pre operácie so súbormi C

Ukazovateľ súboru v C
Ukazovateľ súboru je odkaz na konkrétnu pozíciu v otvorenom súbore. Používa sa pri manipulácii so súbormi na vykonávanie všetkých operácií so súbormi, ako je čítanie, zápis, zatvorenie atď FILE makro na deklarovanie premennej ukazovateľa súboru. Vnútri je definované makro FILE hlavičkový súbor.
Syntax ukazovateľa súboru
FILE* pointer_name ;>
Ukazovateľ súboru sa používa takmer vo všetkých operáciách so súbormi v C.
Otvorte súbor v C
Pre otvorenie súboru v C, fopen() funkcia sa používa s názvom súboru alebo cestou k súboru spolu s požadovanými režimami prístupu.
Syntax funkcie fopen()
FILE* fopen (const char * file_name , const char * access_mode );>
Parametre
- názov súboru : názov súboru, ak sa nachádza v rovnakom adresári ako zdrojový súbor. V opačnom prípade úplná cesta.
- access_mode: Určuje, pre akú operáciu sa súbor otvára.
Návratová hodnota
- Ak sa súbor úspešne otvorí, vráti naň ukazovateľ súboru.
- Ak sa súbor neotvorí, vráti hodnotu NULL.
Režimy otvárania súborov v C
Režimy otvárania súborov alebo režimy prístupu určujú povolené operácie so súborom, ktorý sa má otvoriť. Prenášajú sa ako argument do funkcie fopen(). Niektoré z bežne používaných režimov prístupu k súborom sú uvedené nižšie:
| Režimy otvárania | Popis |
|---|---|
| r | Hľadá súbor. Ak je súbor úspešne otvorený, fopen() ho načíta do pamäte a nastaví ukazovateľ, ktorý ukazuje na prvý znak v ňom. Ak sa súbor nedá otvoriť, funkcia fopen() vráti hodnotu NULL. |
| rb | Otvoriť na čítanie v binárnom režime. Ak súbor neexistuje, funkcia fopen() vráti hodnotu NULL. |
| In | Otvoriť na písanie v textovom režime. Ak súbor existuje, jeho obsah sa prepíše. Ak súbor neexistuje, vytvorí sa nový súbor. Ak nie je možné súbor otvoriť, vráti hodnotu NULL. |
| wb | Otvoriť pre zápis v binárnom režime. Ak súbor existuje, jeho obsah sa prepíše. Ak súbor neexistuje, vytvorí sa. |
| a | Hľadá súbor. Ak je súbor úspešne otvorený, fopen() ho načíta do pamäte a nastaví ukazovateľ, ktorý ukazuje na posledný znak v ňom. Otvára sa iba v režime pripojenia. Ak súbor neexistuje, vytvorí sa nový súbor. Ak nie je možné súbor otvoriť, vráti hodnotu NULL. |
| ab | Otvoriť na pridanie v binárnom režime. Údaje sa pridajú na koniec súboru. Ak súbor neexistuje, vytvorí sa. |
| r+ | Hľadá súbor. Úspešne sa otvorí fopen() načíta ho do pamäte a nastaví ukazovateľ, ktorý ukazuje na prvý znak v ňom. Ak nie je možné súbor otvoriť, vráti hodnotu NULL. |
| rb+ | Otvorené pre čítanie aj zápis v binárnom režime. Ak súbor neexistuje, funkcia fopen() vráti hodnotu NULL. |
| w+ | Hľadá súbor. Ak súbor existuje, jeho obsah sa prepíše. Ak súbor neexistuje, vytvorí sa nový súbor. Ak nie je možné súbor otvoriť, vráti hodnotu NULL. |
| wb+ | Otvorené pre čítanie aj zápis v binárnom režime. Ak súbor existuje, jeho obsah sa prepíše. Ak súbor neexistuje, vytvorí sa. |
| a+ | Hľadá súbor. Ak je súbor úspešne otvorený, fopen() ho načíta do pamäte a nastaví ukazovateľ, ktorý ukazuje na posledný znak v ňom. Otvorí súbor v režime čítania aj pridania. Ak súbor neexistuje, vytvorí sa nový súbor. Ak nie je možné súbor otvoriť, vráti hodnotu NULL. |
| ab+ | Otvoriť na čítanie aj pridávanie v binárnom režime. Ak súbor neexistuje, vytvorí sa. |
Ako je uvedené vyššie, ak chcete vykonávať operácie s binárnym súborom, musíte nakoniec pridať písmeno „b“. Napríklad namiesto w musíte použiť wb, namiesto a+ musíte použiť a+b.
Príklad otvorenia súboru
C
// C Program to illustrate file opening> #include> #include> int> main()> {> >// file pointer variable to store the value returned by> >// fopen> >FILE>* fptr;> >// opening the file in read mode> >fptr =>fopen>(>'filename.txt'>,>'r'>);> >// checking if the file is opened successfully> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'now exit.'>);> >exit>(0);> >}> >return> 0;> }> |
>
>Výkon
The file is not opened. The program will now exit.>
Súbor sa neotvorí, pretože v zdrojovom adresári neexistuje. Ale funkcia fopen() je tiež schopná vytvoriť súbor, ak neexistuje. Je to zobrazené nižšie
Vytvorte súbor v C
Funkcia fopen() dokáže nielen otvoriť súbor, ale môže tiež vytvoriť súbor, ak ešte neexistuje. Na to musíme použiť režimy, ktoré umožňujú vytvorenie súboru, ak sa nenájde, ako napríklad w, w+, wb, wb+, a, a+, ab a ab+.
FILE *fptr; fptr = fopen (' filename.txt ', ' w ');> Príklad otvorenia súboru
C
// C Program to create a file> #include> #include> int> main()> {> >// file pointer> >FILE>* fptr;> >// creating file using fopen() access mode 'w'> >fptr =>fopen>(>'file.txt'>,>'w'>);> >// checking if the file is created> >if> (fptr == NULL) {> >printf>(>'The file is not opened. The program will '> >'exit now'>);> >exit>(0);> >}> >else> {> >printf>(>'The file is created Successfully.'>);> >}> > >return> 0;> }> |
>
>Výkon
The file is created Successfully.>
Čítanie zo súboru
Operáciu čítania súboru v C možno vykonať pomocou funkcií fscanf() alebo fgets(). Obe funkcie vykonali rovnaké operácie ako scanf a get, ale s ďalším parametrom, ukazovateľom súboru. Existujú aj ďalšie funkcie, ktoré môžeme použiť na čítanie zo súboru. Takéto funkcie sú uvedené nižšie:
| Funkcia | Popis |
|---|---|
| fscanf() | Na získanie vstupu zo súboru použite zoznam formátovaných reťazcov a premenných argumentov. |
| fgets() | Zadajte celý riadok zo súboru. |
| fgetc() | Prečíta jeden znak zo súboru. |
| dostať () | Číta číslo zo súboru. |
| fread() | Číta zadané bajty údajov z binárneho súboru. |
Záleží teda na vás, či chcete súbor čítať riadok po riadku alebo znak po znaku.
Príklad:
FILE * fptr; fptr = fopen(fileName.txt, r); fscanf(fptr, '%s %s %s %d', str1, str2, str3, &year); char c = fgetc(fptr);>
Funkcia getc() a niektoré ďalšie funkcie na čítanie súborov vrátia EOF (End Of File), keď počas čítania dosiahnu koniec súboru. EOF označuje koniec súboru a jeho hodnota je definovaná implementáciou.
Poznámka: Jedna vec, ktorú treba poznamenať, je, že po prečítaní určitej časti súboru sa ukazovateľ súboru automaticky presunie na koniec posledného prečítaného znaku.
Zápis do súboru
Operácie zápisu do súboru môžu byť vykonávané funkciami fprintf() a fputs() s podobnosťami s operáciami čítania. Programovanie C poskytuje aj niektoré ďalšie funkcie, ktoré možno použiť na zápis údajov do súboru, ako napríklad:
| Funkcia | Popis |
|---|---|
| fprintf() | Podobne ako printf(), táto funkcia používa formátovaný reťazec a zoznam premenných argumentov na tlač výstupu do súboru. |
| fputs() | Vytlačí celý riadok v súbore a nový riadok na konci. |
| fputc() | Vytlačí jeden znak do súboru. |
| fputw() | Vytlačí číslo do súboru. |
| fwrite() | Táto funkcia zapíše zadané množstvo bajtov do binárneho súboru. |
Príklad:
FILE *fptr ; fptr = fopen(fileName.txt, w); fprintf(fptr, '%s %s %s %d', 'We', 'are', 'in', 2012); fputc('a', fptr);> Zatvorenie súboru
Na zatvorenie súboru sa používa funkcia fclose(). Po úspešných operáciách so súbormi musíte súbor vždy zavrieť, aby ste ho odstránili z pamäte.
Syntax funkcie fclose()
fclose ( file_pointer );>
kde file_pointer je ukazovateľ na otvorený súbor.
Príklad:
FILE *fptr ; fptr= fopen(fileName.txt, w); ---------- Some file Operations ------- fclose(fptr);>
Príklady podávania súborov v C
Príklad 1: Program na vytvorenie súboru, zápis do neho a zatvorenie súboru
C
zadarmo vs zadarmo
// C program to Open a File,> // Write in it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Get the data to be written in file> >char> dataToBeWritten[50] =>'techcodeview.com-A Computer '> >'Science Portal for Geeks'>;> >// Open the existing file GfgTest.c using fopen()> >// in write mode using 'w' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'w'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened.
'>);> >// Write the dataToBeWritten into the file> >if> (>strlen>(dataToBeWritten)>0) {> >// writing in the file using fputs()> >fputs>(dataToBeWritten, filePointer);> >fputs>(>'
'>, filePointer);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(>'Data successfully written in file '> >'GfgTest.c
'>);> >printf>(>'The file is now closed.'>);> >}> > >return> 0;> }> |
>
>Výkon
The file is now opened. Data successfully written in file GfgTest.c The file is now closed.>
Tento program vytvorí súbor s názvom GfgTest.c v rovnakom adresári ako zdrojový súbor, ktorý bude obsahovať nasledujúci text: techcodeview.com-Portál informatiky pre geekov.
Príklad 2: Program na otvorenie súboru, čítanie z neho a zatvorenie súboru
C
// C program to Open a File,> // Read from it, And Close the File> #include> #include> int> main()> {> >// Declare the file pointer> >FILE>* filePointer;> >// Declare the variable for the data to be read from> >// file> >char> dataToBeRead[50];> >// Open the existing file GfgTest.c using fopen()> >// in read mode using 'r' attribute> >filePointer =>fopen>(>'GfgTest.c'>,>'r'>);> >// Check if this filePointer is null> >// which maybe if the file does not exist> >if> (filePointer == NULL) {> >printf>(>'GfgTest.c file failed to open.'>);> >}> >else> {> >printf>(>'The file is now opened.
'>);> >// Read the dataToBeRead from the file> >// using fgets() method> >while> (>fgets>(dataToBeRead, 50, filePointer)> >!= NULL) {> >// Print the dataToBeRead> >printf>(>'%s'>, dataToBeRead);> >}> >// Closing the file using fclose()> >fclose>(filePointer);> >printf>(> >'Data successfully read from file GfgTest.c
'>);> >printf>(>'The file is now closed.'>);> >}> >return> 0;> }> |
>
>
Výkon
The file is now opened. techcodeview.com-A Computer Science Portal for Geeks Data successfully read from file GfgTest.c The file is now closed.>
Tento program načíta text zo súboru s názvom GfgTest.c, ktorý sme vytvorili v predchádzajúcom príklade a vytlačí ho v konzole.
Čítanie a zápis do binárneho súboru
Doteraz sme diskutovali iba o operáciách s textovými súbormi. Operácie s binárnym súborom sú podobné operáciám s textovým súborom s malým rozdielom.
Otvorenie binárneho súboru
Na otvorenie súboru v binárnom režime používame režim prístupu rb, rb+, ab, ab+, wb a wb+ vo funkcii fopen(). V binárnom súbore používame aj príponu súboru .bin.
Príklad
fptr = fopen('filename.bin', 'rb');> Zápis do binárneho súboru
Na zápis údajov do binárneho súboru používame funkciu fwrite(). Dáta sa zapisujú do binárneho súboru v niekoľkých bitoch (0 a 1).
vybrať ako
Syntax funkcie fwrite()
size_t fwrite (const void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Parametre:
- ptr: ukazovateľ na blok pamäte, ktorý sa má zapísať.
- veľkosť: veľkosť každého prvku, ktorý sa má zapísať (v bajtoch).
- nmemb: počet prvkov.
- file_pointer : Ukazovateľ FILE na výstupný prúd súboru.
Návratová hodnota:
- Počet zapísaných objektov.
Príklad: Program na zápis do binárneho súboru pomocou fwrite()
C
// C program to write to a Binary file using fwrite()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >// Structure variable declared here.> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'wb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >int> flag = 0;> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >num.n1 = n;> >num.n2 = 5 * n;> >num.n3 = 5 * n + 1;> >flag =>fwrite>(&num,>sizeof>(>struct> threeNum), 1,> >fptr);> >}> >// checking if the data is written> >if> (!flag) {> >printf>(>'Write Operation Failure'>);> >}> >else> {> >printf>(>'Write Operation Successful'>);> >}> >fclose>(fptr);> > >return> 0;> }> |
>
>
pytónový had vs anakondaVýkon
Write Operation Successful>
Čítanie z binárneho súboru
Funkciu fread() je možné použiť na čítanie údajov z binárneho súboru v jazyku C. Údaje sa zo súboru načítajú v rovnakej forme, v akej sú uložené, t. j. v binárnej forme.
Syntax funkcie fread()
size_t fread (void * ptr , size_t size , size_t nmemb , FILE * file_pointer );>
Parametre:
- ptr: ukazovateľ na blok pamäte na čítanie.
- veľkosť: veľkosť každého prvku na čítanie (v bajtoch).
- nmemb: počet prvkov.
- file_pointer : Ukazovateľ FILE na prúd vstupného súboru.
Návratová hodnota:
- Počet zapísaných objektov.
Príklad: Program na čítanie z binárneho súboru pomocou fread()
C
// C Program to Read from a binary file using fread()> #include> #include> struct> threeNum {> >int> n1, n2, n3;> };> int> main()> {> >int> n;> >struct> threeNum num;> >FILE>* fptr;> >if> ((fptr =>fopen>(>'C:program.bin'>,>'rb'>)) == NULL) {> >printf>(>'Error! opening file'>);> >// If file pointer will return NULL> >// Program will exit.> >exit>(1);> >}> >// else it will return a pointer to the file.> >for> (n = 1; n <5; ++n) {> >fread>(&num,>sizeof>(>struct> threeNum), 1, fptr);> >printf>(>'n1: %d n2: %d n3: %d
'>, num.n1, num.n2,> >num.n3);> >}> >fclose>(fptr);> >return> 0;> }> |
>
>
Výkon
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
fseek() v C
Ak máme v súbore viacero záznamov a potrebujeme získať prístup ku konkrétnemu záznamu, ktorý sa nachádza na špecifickej pozícii, musíme prechádzať všetky záznamy pred ním, aby sme záznam získali. Tým sa stratí veľa pamäte a prevádzkového času. Na zníženie spotreby pamäte a prevádzkového času môžeme použiť fseek() ktorý poskytuje jednoduchší spôsob, ako sa dostať k požadovaným údajom. Funkcia fseek() v C hľadá kurzor na daný záznam v súbore.
Syntax pre fseek()
int fseek(FILE *ptr, long int offset, int pos);>
Príklad funkcie fseek()
C
// C Program to demonstrate the use of fseek() in C> #include> int> main()> {> >FILE>* fp;> >fp =>fopen>(>'test.txt'>,>'r'>);> >// Moving pointer to end> >fseek>(fp, 0, SEEK_END);> >// Printing position of pointer> >printf>(>'%ld'>,>ftell>(fp));> >return> 0;> }> |
>
>
Výkon
81>
pretočiť () v C
The pretočiť () funkcia sa používa na prenesenie ukazovateľa na súbor na začiatok súboru. Môže sa použiť namiesto funkcie fseek(), keď chcete, aby bol ukazovateľ na súbor na začiatku.
Syntax funkcie rewind()
rewind ( file_pointer );>
Príklad
C
// C program to illustrate the use of rewind> #include> int> main()> {> >FILE>* fptr;> >fptr =>fopen>(>'file.txt'>,>'w+'>);> >fprintf>(fptr,>'Geeks for Geeks
'>);> >// using rewind()> >rewind>(fptr);> >// reading from file> >char> buf[50];> >fscanf>(fptr,>'%[^
]s'>, buf);> >printf>(>'%s'>, buf);> >return> 0;> }> |
tabuľka popisu v mysql
>
>Výkon
Geeks for Geeks>
Ďalšie funkcie pre operácie so súbormi C
V nasledujúcej tabuľke sú uvedené niektoré ďalšie funkcie, ktoré možno použiť na vykonávanie operácií so súbormi alebo na pomoc pri ich vykonávaní.
| Funkcie | Popis |
|---|---|
| fopen() | Používa sa na vytvorenie súboru alebo otvorenie súboru. |
| fclose() | Používa sa na zatvorenie súboru. |
| fgets() | Používa sa na čítanie súboru. |
| fprintf() | Používa sa na zapisovanie blokov údajov do súboru. |
| fscanf() | Používa sa na čítanie blokov údajov zo súboru. |
| getc() | Používa sa na čítanie jedného znaku do súboru. |
| putc() | Používa sa na zápis jedného znaku do súboru. |
| fseek() | Používa sa na nastavenie pozície ukazovateľa súboru na uvedené miesto. |
| ftell() | Používa sa na vrátenie aktuálnej polohy ukazovateľa súboru. |
| pretočiť () | Používa sa na nastavenie ukazovateľa súboru na začiatok súboru. |
| putw() | Používa sa na zápis celého čísla do súboru. |
| getw() | Používa sa na čítanie celého čísla zo súboru. |