C Files I / O: maak, open, lees, schrijf en sluit een bestand

Inhoudsopgave:

Anonim

C Bestandsbeheer

Een bestand kan worden gebruikt om een ​​grote hoeveelheid permanente gegevens op te slaan. Net als veel andere talen biedt 'C' de volgende bestandsbeheerfuncties,

  1. Aanmaken van een bestand
  2. Een bestand openen
  3. Een bestand lezen
  4. Schrijven naar een bestand
  5. Een bestand sluiten

Hieronder volgen de belangrijkste bestandsbeheerfuncties die beschikbaar zijn in 'C',

functie doel
fopen () Een bestand aanmaken of een bestaand bestand openen
fclose () Een bestand sluiten
fprintf () Een gegevensblok naar een bestand schrijven
fscanf () Een blokgegevens uit een bestand lezen
getc () Leest een enkel teken uit een bestand
putc () Schrijft een enkel teken naar een bestand
getw () Leest een geheel getal uit een bestand
putw () Een geheel getal naar een bestand schrijven
fseek () Stelt de positie van een bestandspointer in op een opgegeven locatie
ftell () Geeft de huidige positie van een bestandsaanwijzer terug
terugspoelen () Zet de bestandspointer aan het begin van een bestand

In deze tutorial leer je-

  • Hoe maak je een bestand aan?
  • Hoe een bestand te sluiten:
  • Schrijven naar een bestand
    • fputc () Functie:
    • fputs () Functie:
    • fprintf () Functie:
  • Gegevens uit een bestand lezen
  • Interactief bestand lezen en schrijven met getc en putc

Hoe maak je een bestand aan?

Wanneer u met een bestand wilt werken, is de eerste stap het maken van een bestand. Een bestand is niets anders dan ruimte in een geheugen waarin gegevens worden opgeslagen.

Om een ​​bestand in een 'C'-programma te maken, wordt de volgende syntaxis gebruikt,

FILE *fp;fp = fopen ("file_name", "mode");

In de bovenstaande syntaxis is het bestand een datastructuur die is gedefinieerd in de standaardbibliotheek.

fopen is een standaardfunctie die wordt gebruikt om een ​​bestand te openen.

  • Als het bestand niet aanwezig is op het systeem, wordt het gemaakt en vervolgens geopend.
  • Als er al een bestand op het systeem aanwezig is, wordt het direct met deze functie geopend.

fp is een bestandspointer die naar het type bestand verwijst.

Elke keer dat u een bestand opent of maakt, moet u aangeven wat u met het bestand gaat doen. Een bestand in 'C'-programmering kan worden gemaakt of geopend om te lezen / schrijven. Een modus wordt gebruikt om aan te geven of u een bestand wilt openen voor een van de onderstaande doeleinden. Hieronder volgen de verschillende soorten modi in 'C'-programmering die kunnen worden gebruikt tijdens het werken met een bestand.

Bestandsmodus Omschrijving
r Open een bestand om te lezen. Als een bestand zich in de leesmodus bevindt, worden er geen gegevens verwijderd als er al een bestand op een systeem aanwezig is.
w Open een bestand om te schrijven. Als een bestand zich in de schrijfmodus bevindt, wordt er een nieuw bestand gemaakt als een bestand helemaal niet bestaat. Als een bestand al op een systeem aanwezig is, worden alle gegevens in het bestand afgekapt en wordt het geopend om te schrijven.
een Open een bestand in de toevoegmodus. Als een bestand zich in de toevoegmodus bevindt, wordt het bestand geopend. De inhoud van het bestand verandert niet.
r + open voor lezen en schrijven vanaf het begin
w + open voor lezen en schrijven, het overschrijven van een bestand
een + open voor lezen en schrijven, toevoegen aan bestand

In de gegeven syntaxis worden de bestandsnaam en de modus gespecificeerd als strings, daarom moeten ze altijd tussen dubbele aanhalingstekens staan.

Voorbeeld:

#include int main() {FILE *fp;fp = fopen ("data.txt", "w");}

Uitgang:

Het bestand wordt gemaakt in dezelfde map waarin u uw code heeft opgeslagen.

U kunt het pad specificeren waar u uw bestand wilt maken

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

Hoe een bestand te sluiten

Men moet een bestand altijd sluiten als de bewerkingen in het bestand zijn voltooid. Het betekent dat de inhoud en links naar het bestand worden beëindigd. Dit voorkomt onbedoelde schade aan het bestand.

'C' biedt de functie fclose om een ​​bestand te sluiten. De syntaxis van fclose is als volgt,

fclose (file_pointer);

Voorbeeld:

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

De functie fclose gebruikt een bestandspointer als argument. Het bestand dat is gekoppeld aan de bestandspointer wordt vervolgens gesloten met behulp van de functie fclose. Het retourneert 0 als het sluiten is gelukt en EOF (einde van het bestand) als er een fout is opgetreden tijdens het sluiten van het bestand.

Na het sluiten van het bestand kan dezelfde bestandspointer ook met andere bestanden worden gebruikt.

Bij 'C'-programmering worden bestanden automatisch gesloten wanneer het programma wordt beëindigd. Het handmatig sluiten van een bestand door de functie fclose te schrijven, is een goede programmeerpraktijk.

Schrijven naar een bestand

Als u in C naar een bestand schrijft, moeten de tekens '\ n' voor de nieuwe regel expliciet worden toegevoegd.

De stdio-bibliotheek biedt de nodige functies om naar een bestand te schrijven:

  • fputc (char, file_pointer) : Het schrijft een karakter naar het bestand waarnaar wordt verwezen door file_pointer.
  • fputs (str, file_pointer) : Het schrijft een string naar het bestand waarnaar wordt verwezen door file_pointer.
  • fprintf (file_pointer, str, variable_lists) : het drukt een string af naar het bestand waarnaar wordt verwezen door file_pointer. De string kan optioneel indelingsspecificaties en een lijst met variabelen variable_lists bevatten.

Het onderstaande programma laat zien hoe u naar een bestand schrijft:

fputc () Functie:

#include 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;}

Uitgang:

Het bovenstaande programma schrijft een enkel teken in het bestand fputc_test.txt totdat het het volgende lijnsymbool "\ n" bereikt, wat aangeeft dat de zin met succes is geschreven. Het proces is om elk teken van de array te nemen en het in het bestand te schrijven.

  1. In het bovenstaande programma hebben we een bestand gemaakt en geopend met de naam fputc_test.txt in een schrijfmodus en declareren we onze string die in het bestand zal worden geschreven.
  2. We doen een teken-voor-teken schrijfbewerking met for-lus en plaatsen elk teken in ons bestand totdat het teken "\ n" wordt aangetroffen, waarna het bestand wordt gesloten met de functie fclose.

fputs () Functie:

#include 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);}

UITGANG:

  1. In het bovenstaande programma hebben we een bestand gemaakt en geopend met de naam fputs_test.txt in een schrijfmodus.
  2. Nadat we een schrijfbewerking hebben uitgevoerd met de functie fputs (), door drie verschillende strings te schrijven
  3. Vervolgens wordt het bestand gesloten met de functie fclose.

fprintf () Functie:

#include 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;}

UITGANG:

  1. In het bovenstaande programma hebben we een bestand gemaakt en geopend met de naam fprintf_test.txt in een schrijfmodus.
  2. Nadat een schrijfbewerking is uitgevoerd met de functie fprintf () door een string te schrijven, wordt het bestand gesloten met de functie fclose.

Gegevens uit een bestand lezen

Er zijn drie verschillende functies die bedoeld zijn om gegevens uit een bestand te lezen

  • fgetc (file_pointer): Het retourneert het volgende teken uit het bestand waarnaar wordt verwezen door de bestandspointer. Wanneer het einde van het bestand is bereikt, wordt de EOF teruggestuurd.
  • fgets (buffer, n, file_pointer): Het leest n-1 karakters uit het bestand en slaat de string op in een buffer waarin het NULL karakter '\ 0' wordt toegevoegd als het laatste karakter.
  • fscanf (file_pointer, conversion_specifiers, variable_adresses) : Het wordt gebruikt om gegevens te parseren en te analyseren. Het leest tekens uit het bestand en wijst de invoer toe aan een lijst met variabele pointers variable_adresses met behulp van conversiespecificaties. Houd er rekening mee dat, net als bij scanf, fscanf stopt met het lezen van een tekenreeks wanneer er spatie of een nieuwe regel wordt aangetroffen.

Het volgende programma demonstreert het lezen van het bestand fputs_test.txt met respectievelijk de functies fgets (), fscanf () en fgetc ():

#include 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 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;}

Resultaat:

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

  1. In het bovenstaande programma hebben we het bestand "fprintf_test.txt" geopend dat eerder was geschreven met de functie fprintf (), en het bevat de tekenreeks "Learning C with Guru99". We lezen het met behulp van de functie fgets () die regel voor regel leest waar de buffergrootte voldoende moet zijn om de hele regel te verwerken.
  2. We openen het bestand opnieuw om de pointerfile opnieuw in te stellen zodat deze naar het begin van het bestand wijst. Maak verschillende tekenreeksenvariabelen om elk woord afzonderlijk te behandelen. Druk de variabelen af ​​om hun inhoud te zien. De fscanf () wordt voornamelijk gebruikt om gegevens uit een bestand te extraheren en te ontleden.
  3. Open het bestand opnieuw om de pointerfile terug te zetten naar het begin van het bestand. Lees gegevens en druk ze teken voor teken af ​​vanuit het bestand met de functie getc () totdat de EOF-instructie wordt aangetroffen
  4. Na het uitvoeren van een leesbewerkingsbestand met verschillende varianten, hebben we het bestand opnieuw gesloten met de functie fclose.

Interactief bestand lezen en schrijven met getc en putc

Dit zijn de eenvoudigste bestandsbewerkingen. Getc staat voor get character, en putc staat voor put character. Deze twee functies worden gebruikt om slechts één teken tegelijk te verwerken.

Het volgende programma demonstreert de bestandsafhandelingsfuncties in 'C'-programmering:

#include int 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;}

Uitgang:

  1. In het bovenstaande programma hebben we een bestand gemaakt en geopend met de naam demo in een schrijfmodus.
  2. Nadat een schrijfbewerking is uitgevoerd, wordt het bestand gesloten met de functie fclose.
  3. We hebben weer een bestand geopend dat nu gegevens in een leesmodus bevat. Een while-lus wordt uitgevoerd totdat de eof is gevonden. Zodra het einde van het bestand is gevonden, wordt de bewerking beëindigd en worden de gegevens weergegeven met de functie printf.
  4. Na het uitvoeren van een leesbewerking wordt het bestand weer gesloten met de functie fclose.

Overzicht

  • Een bestand is een ruimte in een geheugen waar gegevens worden opgeslagen.
  • 'C'-programmering biedt verschillende functies om met een bestand om te gaan.
  • Een mechanisme voor het manipuleren van bestanden wordt bestandsbeheer genoemd.
  • Een bestand moet worden geopend voordat er bewerkingen op worden uitgevoerd.
  • Een bestand kan worden geopend in een lees-, schrijf- of toevoegmodus.
  • Getc- en putc-functies worden gebruikt om een ​​enkel teken te lezen en te schrijven.
  • De functie fscanf () maakt het mogelijk om gegevens uit een bestand te lezen en te ontleden
  • We kunnen een heel bestand lezen (met behulp van de getc- functie) door het hele bestand te herhalen totdat het EOF wordt aangetroffen
  • We kunnen naar een bestand schrijven nadat het de naam ervan heeft gemaakt, door de functie fprintf () te gebruiken en het moet het nieuwe- regelteken aan het einde van de stringtekst hebben.