C Files I/O: Vytvoření, otevření, čtení, zápis a uzavření souboru

C Správa souborů

Soubor lze použít k uložení velkého objemu trvalých dat. Stejně jako mnoho jiných jazyků poskytuje „C“ následující funkce správy souborů,

  1. Vytvoření souboru
  2. Otevření souboru
  3. Čtení souboru
  4. Zápis do souboru
  5. 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, je pomocí tohoto přímo otevřen funkce.

fp je souborový 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řete soubor v
režim připojení. Pokud je soubor v režimu připojení, 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 zadány jako řetězce, proto musí být vždy uzavřeny do dvojitých uvozovek.

Pří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.

Jak vytvořit soubor

Můžete zadat cestu, kde chcete soubor vytvořit

#include <stdio.h>
int main() {
FILE *fp;
fp  = fopen ("D://data.txt", "w");
}

Jak vytvořit soubor

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);

Příklad:

FILE *fp;
fp  = fopen ("data.txt", "r");
fclose (fp);

Funkce fclose bere jako argument souborový ukazatel. Soubor spojený s ukazatelem na soubor je pak uzavřen pomocí funkce fclose. Vrátí 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ř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(znak, ukazatel_souboru): 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(ukazatel_souboru, str, seznamy_proměnných): 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():

#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:

Zápis do souboru

Výše uvedený program zapíše jeden znak do fputc_test.txt soubor, dokud nedosáhne symbolu dalšího řádku „\n“, což znamená, že věta byla úspěšně zapsána. Proces je vzít každý znak pole a zapsat jej do souboru.

Zápis do souboru

  1. 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.
  2. 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:

Zápis do souboru

Zápis do souboru

  1. Ve výše uvedeném programu jsme vytvořili a otevřeli soubor s názvem fputs_test.txt v režimu zápisu.
  2. Poté, co provedeme operaci zápisu pomocí funkce fputs() napsáním tří různých řetězce
  3. 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:

Zápis do souboru

Zápis do souboru

  1. Ve výše uvedeném programu jsme vytvořili a otevřeli soubor s názvem fprintf_test.txt v režimu zápisu.
  2. 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ý ukazuje ukazatel souboru. Po dosažení konce souboru je EOF odeslán zpět.
  • fgets(buffer, n, file_pointer): Přečte n-1 znaků ze souboru a uloží řetězec do vyrovnávací paměti, ve které je jako poslední znak připojen znak NULL '\0'.
  • fscanf(ukazatel_souboru, specifikátory_konverze, adresy_proměnných): Používá se k analýze a analýze dat. Čte znaky ze souboru a přiřazuje vstup do seznamu proměnné ukazatele proměnné_adresy pomocí konverzních specifikátorů. Mějte na paměti, že stejně jako u scanf přestane fscanf číst řetězec, když narazí na mezeru nebo nový řádek.

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

Čtení dat ze souboru

  1. 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“. Čteme jej pomocí funkce fgets(), která čte řádek po řádku, přičemž velikost vyrovnávací paměti musí být dostatečná, aby zvládla celý řádek.
  2. Znovu soubor otevřeme, abychom obnovili soubor ukazatele tak, aby ukazoval na začátek souboru. Vytvořte různé řetězcové proměnné, které zpracují každé slovo samostatně. Vytiskněte proměnné, abyste viděli jejich obsah. fscanf() se používá hlavně k extrahování a analýze dat ze souboru.
  3. 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
  4. 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:

Interaktivní čtení a zápis souborů pomocí getc a putc

Interaktivní čtení a zápis souborů pomocí getc a putc

  1. Ve výše uvedeném programu jsme vytvořili a otevřeli soubor s názvem demo v režimu zápisu.
  2. Po provedení operace zápisu se soubor zavře pomocí funkce fclose.
  3. 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.
  4. Po provedení operace čtení se soubor opět zavře pomocí funkce fclose.

Shrnutí

  • 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 prováděním operací s ním musí být soubor otevřen.
  • Soubor lze otevřít v režimu čtení, zápisu nebo připojení.
  • 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í getc funkce) celý soubor opakováním tak, aby pokryl 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 textu řetězce.

Shrňte tento příspěvek takto: