C Tiedostot I/O: Luo, avaa, lue, kirjoita ja sulje tiedosto
C Tiedostonhallinta
Tiedostoa voidaan kรคyttรครค suuren mรครคrรคn pysyviรค tietoja tallentamiseen. Kuten monet muut kielet, C tarjoaa seuraavat tiedostonhallintatoiminnot,
- Tiedoston luominen
- Tiedoston avaaminen
- Tiedoston lukeminen
- Kirjoittaminen tiedostoon
- Tiedoston sulkeminen
Seuraavassa on tรคrkeimmรคt tiedostojen hallintatoiminnot, jotka ovat saatavilla 'C:ssรค'
| toiminto | tarkoitus | |
|---|---|---|
| fopen() | Tiedoston luominen tai olemassa olevan tiedoston avaaminen | |
| fclose () | Tiedoston sulkeminen | |
| fprintf() | Tietolohkon kirjoittaminen tiedostoon | |
| fscanf () | Lohkotietojen lukeminen tiedostosta | |
| getc () | Lukee yhden merkin tiedostosta | |
| putc () | Kirjoittaa tiedostoon yhden merkin | |
| getw () | Lukee tiedostosta kokonaisluvun | |
| putw () | Kokonaisluvun kirjoittaminen tiedostoon | |
| fseek () | Asettaa tiedoston osoittimen sijainnin tiettyyn paikkaan | |
| ftell () | Palauttaa tiedostoosoittimen nykyisen sijainnin | |
| kelaa taaksepรคin () | Asettaa tiedostoosoittimen tiedoston alkuun |
Kuinka luoda tiedosto
Aina kun haluat kรคsitellรค tiedostoa, ensimmรคinen askel on luoda tiedosto. Tiedosto ei ole muuta kuin tilaa muistissa, johon tiedot tallennetaan.
Tiedoston luomiseen C-ohjelmassa kรคytetรครคn seuraavaa syntaksia,
FILE *fp;
fp = fopen ("file_name", "mode");
Yllรค olevassa syntaksissa tiedosto on tietorakenne, joka on mรครคritelty vakiokirjastossa.
fopen on vakiotoiminto, jota kรคytetรครคn tiedoston avaamiseen.
- Jos tiedostoa ei ole jรคrjestelmรคssรค, se luodaan ja avataan.
- Jos tiedosto on jo jรคrjestelmรคssรค, se avataan suoraan kรคyttรคmรคllรค tรคtรค toiminto.
fp on tiedostoosoitin, joka osoittaa tyyppitiedostoon.
Aina kun avaat tai luot tiedoston, sinun on mรครคritettรคvรค, mitรค aiot tehdรค tiedostolla. C-ohjelmointitiedosto voidaan luoda tai avata luku-/kirjoitustarkoituksiin. Tilaa kรคytetรครคn mรครคrittรคmรครคn, haluatko avata tiedoston johonkin alla mainituista tarkoituksista. Seuraavassa on erityyppiset C-ohjelmoinnin tilat, joita voidaan kรคyttรครค tiedoston kanssa tyรถskennellessรค.
| Tiedostotila | Tuotetiedot |
|---|---|
| r | Avaa tiedosto lukemista varten. Jos tiedosto on lukutilassa, tietoja ei poisteta, jos tiedosto on jo jรคrjestelmรคssรค. |
| w | Avaa tiedosto kirjoittamista varten. Jos tiedosto on kirjoitustilassa, uusi tiedosto luodaan, jos tiedostoa ei ole ollenkaan. Jos tiedosto on jo jรคrjestelmรคssรค, kaikki tiedoston sisรคltรคmรคt tiedot katkaistaan โโja se avataan kirjoittamista varten. |
| a | Avaa tiedosto sisรครคn liitetila. Jos tiedosto on lisรคystilassa, tiedosto avataan. Tiedoston sisรคltรถ ei muutu. |
| r+ | avoin lukemista ja kirjoittamista varten alusta alkaen |
| w+ | avoinna lukemista ja kirjoittamista varten, tiedoston pรครคllekirjoittamista |
| a+ | avoinna lukemista ja kirjoittamista varten, liittรคminen tiedostoon |
Annetussa syntaksissa tiedoston nimi ja tila on mรครคritetty merkkijonoina, joten ne on aina oltava lainausmerkkien sisรคllรค.
Esimerkiksi:
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen ("data.txt", "w");
}
lรคhtรถ:
Tiedosto luodaan samaan kansioon, johon olet tallentanut koodisi.
Voit mรครคrittรครค polun, johon haluat luoda tiedoston
#include <stdio.h>
int main() {
FILE *fp;
fp = fopen ("D://data.txt", "w");
}
Kuinka sulkea tiedosto
Tiedosto tulee aina sulkea aina, kun tiedoston toiminnot ovat ohi. Se tarkoittaa, ettรค tiedoston sisรคltรถ ja linkit on lopetettu. Tรคmรค estรครค tiedoston vahingossa vahingoittumisen.
"C" tarjoaa fclose-toiminnon tiedoston sulkemiseen. Fclose-syntaksi on seuraava,
fclose (file_pointer);
Esimerkiksi:
FILE *fp;
fp = fopen ("data.txt", "r");
fclose (fp);
Fclose-funktio ottaa tiedostoosoittimen argumenttina. Tiedostoosoittimeen liittyvรค tiedosto suljetaan sitten fclose-toiminnon avulla. Se palauttaa 0:n, jos sulkeminen onnistui, ja EOF:n (tiedoston loppu), jos tiedostoa suljettaessa on tapahtunut virhe.
Tiedoston sulkemisen jรคlkeen samaa tiedostoosoitinta voidaan kรคyttรครค myรถs muiden tiedostojen kanssa.
'C'-ohjelmoinnissa tiedostot suljetaan automaattisesti, kun ohjelma lopetetaan. Tiedoston sulkeminen manuaalisesti kirjoittamalla fclose-toiminto on hyvรค ohjelmointikรคytรคntรถ.
Kirjoittaminen tiedostoon
C:ssรค, kun kirjoitat tiedostoon, rivinvaihtomerkit '\n' on lisรคttรคvรค erikseen.
Stdio-kirjasto tarjoaa tarvittavat toiminnot tiedostoon kirjoittamiseen:
- fputc(merkki, tiedosto_osoitin): Se kirjoittaa merkin tiedostoon, johon file_pointer osoittaa.
- fputs(str, tiedosto_osoitin): Se kirjoittaa merkkijonon tiedostoon, johon file_pointer osoittaa.
- fprintf(tiedoston_osoitin, str, muuttujien_luettelot): Se tulostaa merkkijonon tiedostoon, johon file_pointer osoittaa. Merkkijono voi valinnaisesti sisรคltรครค muotomรครคritteitรค ja luettelon muuttujista variable_lists.
Alla oleva ohjelma nรคyttรครค kuinka kirjoittaa tiedostoon:
fputc()-funktio:
#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;
}
lรคhtรถ:
Yllรค oleva ohjelma kirjoittaa yhden merkin fputc_test.txt tiedostoa, kunnes se saavuttaa seuraavan rivisymbolin "\n", joka osoittaa, ettรค lause on kirjoitettu onnistuneesti. Prosessi on ottaa taulukon jokainen merkki ja kirjoittaa se tiedostoon.
- Yllรค olevassa ohjelmassa olemme luoneet ja avanneet tiedoston nimeltรค fputc_test.txt kirjoitustilassa ja ilmoittaneet merkkijonomme, joka kirjoitetaan tiedostoon.
- Kirjoitamme merkki kerrallaan kรคyttรคmรคllรค for-silmukkaa ja laitamme jokaisen merkin tiedostoomme, kunnes \n-merkki kohtaamme, sitten tiedosto suljetaan fclose-funktiolla.
fputs () Toiminto:
#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);
}
lรคhtรถ:
- Yllรค olevassa ohjelmassa olemme luoneet ja avanneet tiedoston nimeltรค fputs_test.txt kirjoitustilassa.
- Kun teemme kirjoitustoiminnon fputs()-funktiolla kirjoittamalla kolme erilaista jouset
- Sitten tiedosto suljetaan fclose-toiminnolla.
fprintf()-funktio:
#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;
}
lรคhtรถ:
- Yllรค olevassa ohjelmassa olemme luoneet ja avanneet tiedoston nimeltรค fprintf_test.txt kirjoitustilassa.
- Kun kirjoitustoiminto on suoritettu fprintf()-funktiolla kirjoittamalla merkkijono, tiedosto suljetaan fclose-funktiolla.
Tietojen lukeminen tiedostosta
Tietojen lukemiseen tiedostosta on kolme erilaista toimintoa
- fgetc(tiedoston_osoitin): Se palauttaa seuraavan merkin tiedostosta, johon tiedostoosoitin osoittaa. Kun tiedoston loppu on saavutettu, EOF lรคhetetรครคn takaisin.
- fgets(puskuri, n, tiedosto_osoitin): Se lukee tiedostosta n-1 merkkiรค ja tallentaa merkkijonon puskuriin, jonka viimeisenรค merkkinรค on NULL-merkki \0.
- fscanf(tiedoston_osoitin, muunnosmรครคritykset, muuttujan_osoitteet): Sitรค kรคytetรครคn tietojen jรคsentรคmiseen ja analysointiin. Se lukee merkkejรค tiedostosta ja mรครคrittรครค syรถtteen luetteloon muuttuvat osoittimet variable_adresses kรคyttรคmรคllรค muunnosmรครคritteitรค. Muista, ettรค kuten scanf:ssรค, fscanf lopettaa merkkijonon lukemisen, kun vรคlilyรถnti tai rivinvaihto kohtaavat.
Seuraava ohjelma nรคyttรครค lukemisen fputs_test.txt-tiedostosta kรคyttรคmรคllรค fgets(),fscanf()- ja fgetc()-funktioita vastaavasti:
#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;
}
Tulos:
----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
- Yllรค olevassa ohjelmassa olemme avanneet tiedoston nimeltรค โfprintf_test.txtโ, joka on aiemmin kirjoitettu fprintf()-funktiolla, ja se sisรคltรครค tiedoston โLearning C with Guru99โ merkkijono. Luemme sen fgets()-funktiolla, joka lukee rivi riviltรค, โโja puskurin koon on oltava riittรคvรค koko rivin kรคsittelemiseen.
- Avaamme tiedoston uudelleen palauttaaksemme osoittimen osoittamaan tiedoston alkuun. Luomme erilaisia โโmerkkijonomuuttujia kรคsittelemรครคn kutakin sanaa erikseen. Tulosta muuttujat nรคhdรคksesi niiden sisรคllรถn. fscanf()-funktiota kรคytetรครคn pรครคasiassa ...tract ja jรคsentรครค tietoja tiedostosta.
- Avaa tiedosto uudelleen palauttaaksesi osoitintiedoston osoittamaan tiedoston alkuun. Lue tiedot ja tulosta se tiedostosta merkki merkiltรค kรคyttรคmรคllรค getc()-funktiota, kunnes EOF-kรคsky lรถytyy
- Suoritettuamme lukutoimintotiedoston eri muunnelmilla, suljemme tiedoston uudelleen fclose-toiminnolla.
Interaktiivinen tiedosto Lue ja kirjoita getc:llรค ja putc:lla
Nรคmรค ovat yksinkertaisimpia tiedostotoimintoja. Getc on lyhenne sanoista get character, ja putc tarkoittaa put character. Nรคitรค kahta toimintoa kรคytetรครคn kรคsittelemรครคn vain yhtรค merkkiรค kerrallaan.
Seuraava ohjelma esittelee C-ohjelmoinnin tiedostojenkรคsittelytoiminnot:
#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;
}
lรคhtรถ:
- Yllรค olevassa ohjelmassa olemme luoneet ja avaneet tiedoston nimeltรค demo kirjoitustilassa.
- Kun kirjoitus on suoritettu, tiedosto suljetaan fclose-toiminnolla.
- Avasimme jรคlleen tiedoston, joka sisรคltรครค nyt dataa lukutilassa. While-silmukka suoritetaan, kunnes eof on lรถydetty. Kun tiedoston loppu on lรถydetty, toiminto lopetetaan ja tiedot nรคytetรครคn printf-toiminnolla.
- Lukutoiminnon suorittamisen jรคlkeen tiedosto suljetaan uudelleen fclose-toiminnolla.
Yhteenveto
- Tiedosto on muistitila, johon tietoja tallennetaan.
- C-ohjelmointi tarjoaa erilaisia โโtoimintoja tiedoston kรคsittelemiseen.
- Tiedostojen kรคsittelymekanismia kutsutaan tiedostonhallinnaksi.
- Tiedosto on avattava ennen toimintojen suorittamista.
- Tiedosto voidaan avata luku-, kirjoitus- tai lisรคystilassa.
- Getc- ja putc-funktioita kรคytetรครคn yhden merkin lukemiseen ja kirjoittamiseen.
- Funktio fscanf() sallii tietojen lukemisen ja jรคsentรคmisen tiedostosta
- Voimme lukea (kรคyttรคen getc funktio) koko tiedosto loo:n toimestaping peittรครค koko tiedoston, kunnes kohtaa EOF:n
- Voimme kirjoittaa tiedostoon sen nimen luomisen jรคlkeen kรคyttรคmรคllรค funktiota fprintf() ja siinรค on oltava rivinvaihtomerkki merkkijonotekstin lopussa.











