Teknologian jakaminen

[C-kieli] Toista tiedostotoiminnoilla

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

🌟🌟Tekijän kotisivu:lyhytaikaiset__

🌟🌟Kuuluva sarake:C-kieli

Sisällysluettelo

esittely

1. Tiedostojen avaaminen ja sulkeminen

1. virtaus

2. Vakiovirtaus

3. Tekstitiedostot ja binaaritiedostot

4. Toiminnot, jotka ohjaavat tiedoston avaamista ja sulkemista

2. Tiedostojen peräkkäinen lukeminen ja kirjoittaminen

3. Tiedostojen satunnainen lukeminen ja kirjoittaminen

1.fseek-toiminto

2.ftell-toiminto

3.kelaus taaksepäin

4. Tiedoston lukemisen lopun määrittäminen

Tee yhteenveto


esittely

Kun kirjoitamme ohjelmia, tallennamme usein tietoja muuttujiin. Jos ohjelma sulkeutuu ja muisti palautetaan, nämä tiedot menetetään. Joten voimmeko tallentaa nämä tiedot jatkuvasti niin, että tiedot ovat edelleen olemassa, kun ohjelma avataan uudelleen? Vastaus on kyllä. Mitä tämä voi tehdä:Tiedostotoiminnot

1. Tiedostojen avaaminen ja sulkeminen

1. virtaus

Ohjelman tiedot on tulostettava ulkoisille laitteille, ja se on myös syötettävä ulkoisista laitteista. Eri laitteissa syöttö- ja tulostustavat ovat erilaiset. Helpottaaksemme toimintaamme eri syöttö- ja tulostuslaitteilla, meillä on erittäin abstrakti "stream" käsite. C-kielessä syöttö- ja tulostustoiminnot tiedostoilla, näytöillä, näppäimistöillä jne. suoritetaan kaikki "streamien" kautta. Yleensä, jos haluamme kirjoittaa tai lukea tietoja, meidän on avattava virta.

2. Vakiovirtaus

Kun C-kielinen ohjelma käynnistetään, se on oletuksenakolme virtaaMeille jo avattu:

stdin-- Normaali syöttövirta, syöttö useimmissa tapauksissa näppäimistöltä.

stdout-- Vakiolähtövirta, ulostulo näyttöön useimmissa tapauksissa.

stderr-- Normaali virhevirta, ulostulo näyttöön useimmissa tapauksissa.

Koska nämä kolme virtaa on avattu oletuksena, voimme suorittaa suoraan syöttö- ja tulostustoimintoja käyttämällä toimintoja, kuten scanf ja printf.

Näillä kolmella virralla on myös tyyppejä:Tiedostoosoitin (FILE*) .Kun suoritamme tiedostotoimintoja, hyväksymmeTiedoston osoitinmuuttuja voi epäsuorasti löytää siihen liittyvän tiedoston.

3. Tekstitiedostot ja binaaritiedostot

Datatiedostoja kutsutaan sen mukaan, miten tiedot on järjestettytekstitiedostotaibinääritiedosto . Tiedot tallennetaan binäärimuodossa muistiin,Jos se tulostetaan ulkoiseen tallennustiedostoon ilman muuntamista, se onbinääritiedosto
Jos se on tallennettava ASCII-koodina ulkoiseen tallennustilaan, se on muunnettava ennen tallennusta.ASCII-merkkien muodossa tallennettu tiedosto ontekstitiedosto
Miten tieto tallennetaan tiedostoon?
Merkit tallennetaan aina ASCII-muodossa, ja numeeriset tiedot voidaan tallentaa joko ASCII- tai binäärimuodossa. Jos esimerkiksi on olemassa kokonaisluku 10000, jos se tulostetaan levylle ASCII-koodin muodossa, se vie levyllä 5 tavua (yksi tavu kutakin merkkiä kohti), kun taas jos se tulostetaan binäärimuodossa, se vie vain 4 tavua levyllä.

4. Toiminnot, jotka ohjaavat tiedoston avaamista ja sulkemista

Kun olet ymmärtänyt nämä ennakkotiedot, siirrytään asiaan - tiedostojen avaamiseen ja tiedostojen sulkemiseen. C-kieli tarjoaa kaksi toimintoa, jotka vastaavat tiedostojen avaamisesta ja sulkemisesta. Prototyypit ovat seuraavat:

avaa tiedosto:
TIEDOSTO * fopen ( const char * tiedostonimi, const char * tila );
Sulje tiedosto:
int fclose (TIEDOSTO * stream );

Fopen-funktiolla on kaksi parametria,Ensimmäinen parametri ilmaistaan ​​merkkijonon muodossaTiedoston nimi, toinen parametri on tiedostoAvoin menetelmä, jota edustaa merkkijono .Kun käytät tätä toimintoa, meidän on luotava atiedosto osoitinmuuttuja Jos tiedosto ei avaudu, vastaanottaa se palauttaa nollaosoittimen. Mitä tulee avausmenetelmiin, tässä on seuraavat:

Avoin menetelmämerkitysJos määritettyä tiedostoa ei ole olemassa
"r" (vain luku)
Syötä tietoja avaamalla olemassa oleva tekstitiedosto
Palauttaa nollaosoittimen
"w" (vain kirjoitus)
Tulosta tiedot avaamalla tekstitiedosto
Luo uusi tiedosto
"a" (liitä)Lisää tiedot tekstitiedoston loppuunLuo uusi tiedosto
"rb" (vain luku)Syötä tiedot avaamalla binääritiedostoPalauttaa nollaosoittimen
"wb" (vain kirjoitus)Jos haluat tulostaa tietoja, avaa binääritiedostoLuo uusi tiedosto
"ab" (liitä)Lisää tietoja binaaritiedoston loppuunLuo uusi tiedosto
"r+" (lue ja kirjoita)Avaa tekstitiedosto lukemista ja kirjoittamista vartenPalauttaa nollaosoittimen
"w+" (lue ja kirjoita)Luo uusi tekstitiedosto lukemista ja kirjoittamista vartenLuo uusi tiedosto
"a+" (lue ja kirjoita)Avaa tiedosto ja lue ja kirjoita tiedoston loppuunLuo uusi tiedosto
"rb+" (lue ja kirjoita)Avaa binääritiedosto lukemista ja kirjoittamista vartenPalauttaa nollaosoittimen
"wb+" (lue ja kirjoita)
Luo uusi binääritiedosto lukemista ja kirjoittamista vartenLuo uusi tiedosto
"ab+" (lue ja kirjoita)
Avaa binääritiedosto ja lue ja kirjoita tiedoston loppuunLuo uusi tiedosto

fclose-funktiolle sen parametri on tiedostoosoitin, jota käytetään sulkemaan tiedostoosoittimen osoittama tiedosto.

Seuraavaksi yritämme avata ja sulkea tiedoston:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");
  5. if (pf == NULL)//文件打开失败则退出程序
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. printf("文件打开成功n");
  11. fclose(pf);
  12. pf = NULL;//避免出现野指针,及时制空
  13. return 0;
  14. }
operaation tulos:

Voidaan nähdä, että koska avaustapa on "w", tiedosto nimeltä "test.txt" ilmestyy polulle.

2. Tiedostojen peräkkäinen lukeminen ja kirjoittaminen

Seuraavaksi esittelemme useita toimintojaLue tai kirjoita tietoja tiedostoon

Toiminnon nimiToimintoKoskee
fgetcMerkkien syöttötoimintoKaikki tulovirrat
fputcmerkkitulostustoimintoKaikki lähtövirrat
fgetsTekstirivin syöttötoimintoKaikki tulovirrat
fputsTekstirivin tulostustoimintoKaikki lähtövirrat
fscanfMuotoile syöttötoimintoKaikki tulovirrat
fprintfMuotoile tulosteen toiminto Kaikki lähtövirrat
pelottaaBinäärituloTiedoston syöttövirta
fwriteBinaarilähtöTiedoston tulostusvirta

Seuraavaksi yritämme käyttääfscanfjafprintftoiminto:

Näiden kahden funktion ensimmäinen parametri on tiedostoosoitin, jota käytetään tiedostotietojen lukemiseen ja kirjoittamiseen. Seuraavat parametrit ovat samat kuin scanf- ja printf-funktiot.

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
  5. if (pf == NULL)
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. fprintf(pf, "123456");//向文件中写入数据
  11. fclose(pf);
  12. pf = NULL;
  13. return 0;
  14. }

Kuten näet, tiedot on kirjoitettu tiedostoon. Seuraavaksi käytämme fscanf-toimintoa tiedostotietojen tulostamiseen näytölle:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char str[20] = { 0 };
  5. FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
  6. if (pf == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. fscanf(pf, "%s", str);//读取数据到str当中
  12. printf(str);
  13. fclose(pf);
  14. pf = NULL;
  15. return 0;
  16. }
operaation tulos:

3. Tiedostojen satunnainen lukeminen ja kirjoittaminen

1.fseek-toiminto

Fseek-funktion funktio onPerustuu tiedostoosoittimen sijaintiin ja siirtymäänasematiedostoosoitin . Sen prototyyppi on seuraava:

int fseek ( TIEDOSTO * stream, pitkä int offset, int alkuperä );

Sen ensimmäinen parametri on tiedostoosoitin, toinen parametri on offset suhteessa asetettuun paikkaan ja kolmas parametri on asetettu sijainti.

C-kieli määrittelee kolmeMakro, voit valita yhden niistä kolmanneksi parametriksi:

SEEK_SET: tiedoston aloituspaikka

SEEK_CUR: Tiedostoosoittimen nykyinen sijainti

SEEK_END: ​​tiedoston loppu

Kun olet löytänyt tiedostoosoittimen, voimme lukea tai kirjoittaa tiedoston määritettyyn sijaintiin.

2.ftell-toiminto

ftell-funktiota käytetään palauttamiseenTiedoston osoittimen siirtymä suhteessa aloituspaikkaan . Toiminnan prototyyppi:

pitkä int ftell (TIEDOSTO * virta);

3.kelaus taaksepäin

kelaustoimintoa käytetäänPalauta tiedoston osoittimen sijainti tiedoston alkuun . Sen toimintoprototyyppi:

tyhjä kelaus taaksepäin (FILE * stream );

4. Tiedoston lukemisen lopun määrittäminen

1. Sillätekstitiedosto, voimme ensin käyttääfgetcFunktio kiertää tiedoston merkkejä, kunnes EOF on luettu, mikä osoittaaTiedoston lukeminen päättyy

2. Silläbinääritiedosto,KäytämmepelottaaFunktio määrittää palautusarvon:Onko se pienempi kuin todellinen luku luettava? .Jos se on pienempi kuinLukeminen loppuu.

Kahdessa edellä mainitussa tapauksessa tiedostoLukemisen lopussa, voimme jatkaa tuomitsemistaSyy, miksi tiedoston lukeminen päättyi . Esittele kaksi toimintoa:feofjarauta

feofKäytettävä toimintoMääritä tiedoston lukemisen loppusyyvai eiTiedoston loppu havaittiin . Sen prototyyppi on seuraava:

int feof (TIEDOSTO * virta);

Jos tiedosto johtuuLue tiedoston loppuunKun lukema on valmis, EOF palautetaan muissa tapauksissa 0.

        rautaKäytettävä toimintoMääritä tiedoston lukemisen loppusyyvai eiTapahtui I/O-virhe . Prototyyppi on seuraava:

int ferror ( FILE * stream );

Jos tiedosto johtuuTapahtui I/O-virheKun lukeminen on valmis, palautetaan nollasta poikkeava arvo muissa tapauksissa 0.

Seuraavaksi yritämme kirjoittaa koodinpätkän arvioidaksemme tiedoston lukemisen loppua:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int c = 0;
  5. FILE* fp = fopen("test.txt", "r");
  6. if (fp == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
  12. {
  13. putchar(c);
  14. }
  15. //判断读取结束的原因
  16. if (ferror(fp))
  17. puts("I/O错误n");
  18. else if (feof(fp))
  19. puts("文件读取结束n");
  20. fclose(fp);
  21. fp = NULL;
  22. return 0;
  23. }

Tee yhteenveto

Tänään opimme tiedostojen toiminnasta, tiedostojen avaamisesta ja sulkemisesta, tietojen kirjoittamisesta tai tietojen lukemisesta tiedostoista, toiminnoista tiedostojen osoittimien säätämiseksi ja tiedostojen lukemisen päättymisen määrittämisestä. Jos pidät bloggaajan sanomaa hyvää, jätä pieni tykkäys ja kiitos tuestanne❤❤❤