C Správa souborů
Soubor lze použít k uložení velkého množství trvalých dat. Stejně jako mnoho jiných jazyků poskytuje i C následující funkce správy souborů,
- Vytvoření souboru
- Otevření souboru
- Čtení souboru
- Zápis do souboru
- Zavření souboru
Následuje seznam nejdůležitějších funkcí pro správu souborů dostupných 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 |
fseek () | Nastaví pozici 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 |
V tomto výukovém programu se naučíte
- Jak vytvořit soubor
- Jak zavřít soubor:
- Zápis do souboru
- Funkce fputc ():
- Funkce fputs ():
- Funkce fprintf ():
- Čtení dat ze souboru
- Interaktivní čtení a zápis souborů pomocí getc a putc
Jak vytvořit soubor
Kdykoli chcete se souborem pracovat, je prvním krokem jeho vytvoření. Soubor není nic jiného než prostor v paměti, kde jsou uložena data.
Chcete-li vytvořit soubor v programu „C“ pomocí 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 v systému není, vytvoří se a poté se otevře.
- Pokud je soubor v systému již přítomen, pak se pomocí této funkce přímo otevře.
fp je ukazatel souboru, 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ů | Popis |
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 k dispozici. |
w | Otevřete soubor pro zápis. Pokud je soubor v režimu psaní, vytvoří se nový soubor, pokud vůbec neexistuje. Pokud je soubor již v systému přítomen, jsou všechna data uvnitř souboru zkrácena a je otevřen pro účely zápisu. |
A | Otevřete soubor v režimu připojení. Pokud je soubor v připojovacím režimu, otevře se. Obsah v souboru se nezmění. |
r + | otevřeno pro čtení a psaní od začátku |
w + | otevřené pro čtení a zápis, přepsání souboru |
a + | otevřené pro čtení a psaní, 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 do uvozovek.
Příklad:
#includeint main() {FILE *fp;fp = fopen ("data.txt", "w");}
Výstup:
Soubor je vytvořen ve stejné složce, kam jste uložili kód.
Můžete určit cestu, kde chcete vytvořit soubor
#includeint main() {FILE *fp;fp = fopen ("D://data.txt", "w");}
Jak zavřít soubor
Vždy, když operace se souborem skončí, měl by se soubor vždy zavřít. To znamená, že obsah a odkazy na soubor jsou ukončeny. Tím se zabrání náhodnému poškození pilníku.
'C' poskytuje funkci fclose k provedení operace uzavření souboru. Syntaxe fclose je následující,
fclose (file_pointer);
Příklad:
FILE *fp;fp = fopen ("data.txt", "r");fclose (fp);
Funkce fclose bere jako argument ukazatel souboru. Soubor přidružený k ukazateli souboru se poté uzavře pomocí funkce fclose. Vrací 0, pokud bylo zavření úspěšné, a EOF (konec souboru), pokud došlo k chybě při zavírání souboru.
Po zavření souboru lze stejný ukazatel souboru použít také s jinými soubory.
V programování „C“ se soubory automaticky zavírají, když je program ukončen. Dobrým programovacím postupem je ruční zavření souboru napsáním funkce fclose.
Zápis do souboru
V C, když píšete do souboru, musí být výslovně přidány znaky nového řádku '\ n'.
Knihovna stdio nabízí nezbytné funkce pro zápis do souboru:
- fputc (char, file_pointer) : Zapíše znak do souboru, na který ukazuje file_pointer.
- fputs (str, file_pointer) : Zapíše řetězec do souboru, na který ukazuje file_pointer.
- fprintf (file_pointer, str, variable_lists) : Vytiskne řetězec do souboru, na který ukazuje file_pointer. Řetězec může volitelně obsahovat specifikátory formátu a seznam proměnných variable_lists.
Níže uvedený program ukazuje, jak provést zápis do souboru:
Funkce fputc ():
#includeint 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 jeden znak do souboru fputc_test.txt, dokud nedosáhne symbolu dalšího řádku „\ n“, což znamená, že věta byla úspěšně zapsána. Proces spočívá v převzetí každého znaku pole a jeho zapsání 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 do souboru zapsán.
- Provádíme operaci zápisu znak po znaku pomocí smyčky for a vkládáme každý znak do našeho souboru, dokud nenarazíme na znak „\ n“, pak je soubor uzavřen pomocí funkce fclose.
Funkce fputs ():
#includeint 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 () zápisem tří různých řetězců
- Poté je soubor uzavřen pomocí funkce fclose.
Funkce fprintf ():
#includeint 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.
- Poté, co je operace zápisu provedena pomocí funkce fprintf () zápisem řetězce, je soubor uzavřen pomocí funkce fclose.
Čtení dat ze souboru
Existují tři různé funkce vyhrazené pro čtení dat ze souboru
- fgetc (file_pointer): Vrátí další znak ze souboru, na který ukazuje ukazatel souboru. Po dosažení konce souboru je EOF odeslán zpět.
- fgets (buffer, n, file_pointer): Načte ze souboru n-1 znaků a uloží řetězec do vyrovnávací paměti, ve které je jako poslední znak připojen znak NULL '\ 0'.
- fscanf (file_pointer, conversion_specifiers, variable_adress) : Používá se k analýze a analýze dat. Čte znaky ze souboru a pomocí specifikátorů převodu přiřadí vstup do seznamu ukazatelů proměnných variable_adresses. Mějte na paměti, že stejně jako u scanf, fscanf přestane číst řetězec, když dojde k mezerám nebo novému řádku.
Následující program ukazuje čtení ze souboru fputs_test.txt pomocí funkcí fgets (), fscanf () a fgetc ():
#includeint 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 pointerchar 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 pointerwhile ((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 řetězec "Learning C with Guru99". Přečetli jsme to pomocí funkce fgets (), která čte řádek po řádku, kde velikost vyrovnávací paměti musí stačit, aby zvládla celý řádek.
- Znovu otevřete soubor, abychom resetovali soubor ukazatele tak, aby ukazoval na začátek souboru. Vytvořte různé proměnné řetězců, aby bylo možné zpracovat každé slovo samostatně. Vytisknutím proměnných zobrazíte jejich obsah. Fscanf () se používá hlavně k extrakci a analýze dat ze souboru.
- Znovu otevřete soubor a resetujte soubor ukazatele tak, aby ukazoval na začátek souboru. Načtěte data a tiskněte je ze souboru po znaku pomocí funkce getc (), dokud nenarazíte na příkaz EOF
- Po provedení operace operace čtení pomocí různých variant jsme soubor znovu uzavřeli pomocí funkce fclose.
Interaktivní čtení a zápis souborů pomocí getc a putc
Jedná se o nejjednodušší operace se soubory. Getc znamená get 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':
#includeint main() {FILE * fp;char c;printf("File Handling\n");//open a filefp = fopen("demo.txt", "w");//writing operationwhile ((c = getchar()) != EOF) {putc(c, fp);}//close filefclose(fp);printf("Data Entered:\n");//readingfp = 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 je soubor uzavřen pomocí funkce fclose.
- Znovu jsme otevřeli soubor, který nyní obsahuje data v režimu čtení. Smyčka while se spustí, dokud nebude nalezen eof. Jakmile je nalezen konec souboru, operace bude ukončena a data budou zobrazena pomocí funkce printf.
- Po provedení operace operace čtení je soubor opět uzavřen pomocí funkce fclose.
souhrn
- Soubor je prostor v paměti, kde jsou uložena data.
- Programování „C“ poskytuje různé funkce pro práci se souborem.
- Mechanismus manipulace se soubory se nazývá správa souborů.
- Před provedením operací s ním musí být soubor otevřen.
- Soubor lze otevřít v režimu čtení, zápisu nebo přidání.
- Funkce Getc a putc se používají ke čtení a zápisu jednoho znaku.
- Funkce fscanf () umožňuje číst a analyzovat data ze souboru
- Můžeme číst (pomocí funkce getc ) celý soubor smyčkováním, abychom pokryli celý soubor, dokud nenarazíte na EOF
- Do souboru můžeme zapisovat po vytvoření jeho názvu pomocí funkce fprintf () a musí mít znak nového řádku na konci textového řetězce.