C Files I/O: Vytvoření, otevření, čtení, zápis a uzavření souboru
⚡ Chytré shrnutí
Práce se soubory v jazyce C ukládá na disk pomocí knihovny stdio, která soubor otevírá příkazem fopen, zapisuje do něj pomocí fputc, fputs nebo fprintf, čte do něj pomocí fgetc, fgets nebo fscanf a zavírá ho pomocí fclose.

C Správa souborů
Soubor lze použít k ukládání velkého objemu trvalých dat. Stejně jako mnoho jiných jazyků nabízí i „C“ následující správu souborů. funkce,
- Vytvoření souboru
- Otevření souboru
- Čtení souboru
- Zápis do souboru
- Zavření souboru
Níže jsou uvedeny nejdůležitější funkce správy souborů dostupné v 'C,'
| funkce | účel |
|---|---|
| fopen() | Vytvoření souboru nebo otevření existujícího souboru |
| fclose () | Zavření souboru |
| fprintf() | Zápis bloku dat do souboru |
| fscanf () | Čtení dat bloku ze souboru |
| getc () | Přečte jeden znak ze souboru |
| putc () | Zapíše jeden znak do souboru |
| getw () | Přečte celé číslo ze souboru |
| putw () | Zápis celého čísla do souboru |
| fhledat () | Nastaví polohu ukazatele souboru na zadané umístění |
| ftell () | Vrátí aktuální pozici ukazatele souboru |
| přetočit () | Nastaví ukazatel souboru na začátek souboru |
Jak vytvořit soubor
Kdykoli chcete pracovat se souborem, prvním krokem je vytvoření souboru. Soubor není nic jiného než prostor v paměti, kde jsou uložena data.
K vytvoření souboru v programu 'C' se používá následující syntaxe,
FILE *fp; fp = fopen ("file_name", "mode");
Ve výše uvedené syntaxi je soubor datovou strukturou, která je definována ve standardní knihovně.
fopen je standardní funkce, která se používá k otevření souboru.
- Pokud soubor není v systému přítomen, je vytvořen a poté otevřen.
- Pokud je soubor již v systému přítomen, pak se pomocí této funkce přímo otevře.
fp je soubor ukazatel který ukazuje na typový soubor.
Kdykoli otevřete nebo vytvoříte soubor, musíte určit, co se souborem uděláte. Soubor v programování 'C' lze vytvořit nebo otevřít pro účely čtení/zápisu. Režim se používá k určení, zda chcete otevřít soubor pro některý z níže uvedených účelů. Následují různé typy režimů v programování 'C', které lze použít při práci se souborem.
| Režim souborů | Description |
|---|---|
| r | Otevřete soubor ke čtení. Pokud je soubor v režimu čtení, nebudou odstraněna žádná data, pokud je soubor již v systému přítomen. |
| w | Otevřete soubor pro zápis. Pokud je soubor v režimu zápisu, vytvoří se nový soubor, pokud soubor vůbec neexistuje. Pokud je soubor již v systému přítomen, všechna data v souboru jsou zkrácena a je otevřen pro účely zápisu. |
| a | Otevření souboru v režimu přidávání. Pokud je soubor v režimu přidávání, soubor se otevře. Obsah souboru se nemění. |
| r+ | otevřená pro čtení a psaní od začátku |
| w+ | otevřít pro čtení a zápis, přepsání souboru |
| a+ | otevřít pro čtení a zápis, připojení k souboru |
V dané syntaxi jsou název souboru a režim specifikovány jako řetězce proto musí být vždy uzavřeny v uvozovkách.
Například:
#include <stdio.h> int main() { FILE *fp; fp = fopen ("data.txt", "w"); }
Výstup:
Soubor se vytvoří ve stejné složce, kam jste uložili svůj kód.
Můžete zadat cestu, kde chcete soubor vytvořit
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
Jak zavřít soubor
Člověk by měl vždy zavřít soubor, kdykoli operace se souborem skončí. To znamená, že obsah a odkazy na soubor jsou ukončeny. Tím se zabrání náhodnému poškození souboru.
'C' poskytuje funkci fclose pro provedení operace uzavření souboru. Syntaxe fclose je následující,
fclose (file_pointer);
Například:
FILE *fp; fp = fopen ("data.txt", "r"); fclose (fp);
Funkce fclose přijímá jako argument ukazatel souboru. Soubor spojený s ukazatelem souboru je poté pomocí funkce fclose uzavřen. V případě úspěšného zavření vrátí hodnotu 0 a v případě chyby při zavírání souboru vrátí hodnotu EOF (konec souboru).
Po zavření souboru lze stejný ukazatel souboru použít také s jinými soubory.
V programování 'C' se soubory automaticky zavřou, když je program ukončen. Ruční uzavření souboru zápisem funkce fclose je dobrou programátorskou praxí.
Zápis do souboru
V C, když zapisujete do souboru, musí být explicitně přidány znaky nového řádku '\n'.
Knihovna stdio nabízí potřebné funkce pro zápis do souboru:
- fputc(char, file_pointer): Zapíše znak do souboru, na který odkazuje file_pointer.
- fputs(str, file_pointer): Zapíše řetězec do souboru, na který odkazuje file_pointer.
- fprintf(ukazatel_souboru, str, seznam_proměnných): Vypíše řetězec do souboru, na který odkazuje ukazatel_souboru. Řetězec může volitelně obsahovat specifikátory formátu a seznam proměnných seznam_proměnných.
Níže uvedený program ukazuje, jak provést zápis do souboru:
Funkce fputc():
#include <stdio.h> int main() { int i; FILE * fptr; char fn[50]; char str[] = "Guru99 Rocks\n"; fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode" for (i = 0; str[i] != '\n'; i++) { /* write to file using fputc() function */ fputc(str[i], fptr); } fclose(fptr); return 0; }
Výstup:
Výše uvedený program zapisuje do souboru fputc_test.txt jeden znak, dokud nedosáhne symbolu dalšího řádku „\n“, který indikuje, že věta byla úspěšně zapsána. Proces spočívá ve zapsání každého znaku z pole do souboru.
- Ve výše uvedeném programu jsme vytvořili a otevřeli soubor s názvem fputc_test.txt v režimu zápisu a deklarovali náš řetězec, který bude zapsán do souboru.
- Provedeme operaci zápisu znak po znaku pomocí cyklu for a vložíme každý znak do našeho souboru, dokud nenarazíme na znak „\n“, pak se soubor zavře pomocí funkce fclose.
fputs () Funkce:
#include <stdio.h> int main() { FILE * fp; fp = fopen("fputs_test.txt", "w+"); fputs("This is Guru99 Tutorial on fputs,", fp); fputs("We don't need to use for loop\n", fp); fputs("Easier than fputc function\n", fp); fclose(fp); return (0); }
Výstup:
- Ve výše uvedeném programu jsme vytvořili a otevřeli soubor s názvem fputs_test.txt v režimu zápisu.
- Poté, co provedeme operaci zápisu pomocí funkce fputs() zapsáním tří různých řetězců
- Poté je soubor uzavřen pomocí funkce fclose.
fprintf()Funkce:
#include <stdio.h> int main() { FILE *fptr; fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode" /* write to file */ fprintf(fptr, "Learning C with Guru99\n"); fclose(fptr); return 0; }
Výstup:
- Ve výše uvedeném programu jsme vytvořili a otevřeli soubor s názvem fprintf_test.txt v režimu zápisu.
- Po provedení operace zápisu pomocí funkce fprintf() zapsáním řetězce se soubor uzavře pomocí funkce fclose.
Čtení dat ze souboru
Ke čtení dat ze souboru jsou určeny tři různé funkce
- fgetc(ukazatel_souboru): Vrací další znak ze souboru, na který odkazuje ukazatel souboru. Po dosažení konce souboru je zpět odeslán EOF.
- fgets(buffer, n, file_pointer): Přečte n-1 znaků ze souboru a uloží řetězec do bufferu, ve kterém je jako poslední znak připojen znak NULL '\0'.
- fscanf(ukazatel_souboru, specifikace_převodu, adresy_proměnných): Používá se k parsování a analýze dat. Čte znaky ze souboru a přiřazuje vstup seznamu ukazatelů na proměnné adresy_proměnných pomocí specifikátorů převodu. Mějte na paměti, že stejně jako u scanf, i fscanf zastaví čtení řetězce, když narazí na mezeru nebo znak nového řádku.
Následující program demonstruje čtení ze souboru fputs_test.txt pomocí funkcí fgets(), fscanf() a fgetc ():
#include <stdio.h> int main() { FILE * file_pointer; char buffer[30], c; file_pointer = fopen("fprintf_test.txt", "r"); printf("----read a line----\n"); fgets(buffer, 50, file_pointer); printf("%s\n", buffer); printf("----read and parse data----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer char str1[10], str2[2], str3[20], str4[2]; fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4); printf("Read String1 |%s|\n", str1); printf("Read String2 |%s|\n", str2); printf("Read String3 |%s|\n", str3); printf("Read String4 |%s|\n", str4); printf("----read the entire file----\n"); file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointer while ((c = getc(file_pointer)) != EOF) printf("%c", c); fclose(file_pointer); return 0; }
Výsledek:
----read a line---- Learning C with Guru99 ----read and parse data---- Read String1 |Learning| Read String2 |C| Read String3 |with| Read String4 |Guru99| ----read the entire file---- Learning C with Guru99
- Ve výše uvedeném programu jsme otevřeli soubor s názvem „fprintf_test.txt“, který byl dříve napsán pomocí funkce fprintf() a obsahuje text „Učení se C s…“. GuruŘetězec o délce 99 palců. Čteme ho pomocí funkce fgets(), která čte řádek po řádku, přičemž velikost vyrovnávací paměti musí být dostatečná pro zpracování celého řádku.
- Soubor znovu otevřeme, abychom resetovali ukazatel souboru na začátek souboru. Vytvoříme různé řetězcové proměnné pro zpracování každého slova zvlášť. Vypíšeme proměnné a zobrazíme jejich obsah. Funkce fscanf() se používá hlavně k explozi.tract a analyzovat data ze souboru.
- Znovu otevřete soubor, abyste obnovili soubor ukazatele tak, aby ukazoval na začátek souboru. Čtěte data a tiskněte je ze souboru znak po znaku pomocí funkce getc(), dokud nenarazíte na příkaz EOF
- Po provedení operace čtení souboru pomocí různých variant jsme soubor opět zavřeli pomocí funkce fclose.
Interaktivní čtení a zápis souborů pomocí getc a putc
Toto jsou nejjednodušší operace se soubory. Getc znamená získat charakter a putc znamená put charakter. Tyto dvě funkce se používají ke zpracování pouze jednoho znaku najednou.
Následující program demonstruje funkce zpracování souborů v programování 'C':
#include <stdio.h> int main() { FILE * fp; char c; printf("File Handling\n"); //open a file fp = fopen("demo.txt", "w"); //writing operation while ((c = getchar()) != EOF) { putc(c, fp); } //close file fclose(fp); printf("Data Entered:\n"); //reading fp = fopen("demo.txt", "r"); while ((c = getc(fp)) != EOF) { printf("%c", c); } fclose(fp); return 0; }
Výstup:
- Ve výše uvedeném programu jsme vytvořili a otevřeli soubor s názvem demo v režimu zápisu.
- Po provedení operace zápisu se soubor zavře pomocí funkce fclose.
- Znovu jsme otevřeli soubor, který nyní obsahuje data v režimu čtení. Smyčka while bude probíhat, dokud nebude nalezen eof. Jakmile je nalezen konec souboru, operace se ukončí a data se zobrazí pomocí funkce printf.
- Po provedení operace čtení se soubor opět zavře pomocí funkce fclose.











