Sukurkite spindulių kelią prizmėje. Stepanova V.A. geometrinės optikos elementai

Funkcija fopen () atidaro srautą naudoti, susieja failą su tuo srautu ir grąžina FILE žymeklį į tą srautą. Dažniausiai failas traktuojamas kaip disko failas. Funkcija fopen() turi tokį prototipą:

FILE *fopen(const char *failo pavadinimas, const char *režimas);

Kur režimas nurodo eilutę, kurioje yra norimas failo atidarymo režimas. Tinkamos Borland C++ režimo reikšmės pateiktos lentelėje. failo pavadinimas turi būti simbolių eilutė, nurodanti galiojantį failo pavadinimą operacinė sistema, ir gali būti kelio nuoroda.

Funkcija fopen() grąžina žymeklį į bazinį tipą FILE. Šis žymeklis identifikuoja failą ir yra naudojamas daugeliui funkcijų. failų sistema. Niekada neturėtumėte to keisti patys. Funkcija grąžina nulinę rodyklę, jei failo negalima atidaryti.

Kaip parodyta lentelėje, failą galima atidaryti tekstiniu arba dvejetainiu režimu. Teksto režimu, kai įvesite, karietos grąžinimo ir eilučių tiekimo seka paverčiama naujos eilutės simboliu. Išvestyje yra atvirkščiai: naujos eilutės simbolis verčiamas į vežimo grįžimą ir eilutės tiekimą. Šis vertimas nevyksta dvejetainiuose failuose. Kai režimo argumente nenurodytas nei t, nei b, tada failo teksto/dvejetainė būsena nustatoma pagal visuotinio kintamojo _fmode reikšmę, apibrėžtą Borland C++. Pagal numatytuosius nustatymus fmode nustatytas į O_TEXT, tai yra, nustatytas teksto režimas. Jei nustatysite _fmode į O_BINARY, failai bus atidaryti dvejetainiu režimu. (Šios makrokomandos yra apibrėžtos fcntl.h.) Natūralu, kad naudojant aiškų t arba b pašalinami su _fmode kintamuoju susiję efektai. Be to, _fmode yra būdingas tik Borland produktams. Jis neapibrėžtas ANSI C įvesties/išvesties sistemoje.

Jei jums reikia atidaryti failą pavadinimu testas rašymui, turėtumėte parašyti:

Fp = fopen("testas", "w");

Kur yra fp tipo kintamasis FAILAS *. Tačiau įprasta matyti šiuos dalykus:

If((fp = fopen("testas", "w"))==NULL) (
puts("Negalima atidaryti failo.");
išėjimas (1);
}

Šis metodas leidžia aptikti klaidas atidarant failą, pavyzdžiui, įrašymo apsaugos buvimą arba jos nebuvimą laisvos vietos diske.

Jei fopen() naudojamas norint atidaryti failą rašymui, tada bet koks jau buvęs failas nurodytu pavadinimu bus ištrintas. Jei failo nurodytu pavadinimu nėra, jis bus sukurtas.

Jei reikia pridėti informacijos prie failo pabaigos, naudokite režimą a (pridėti). Jei failo nėra, jis bus sukurtas.

Norint atidaryti failą skaitymui, reikalingas failo buvimas. Jei failo nėra, bus grąžinta klaida. Jei failas atidaromas skaitymo/rašymo operacijai, tada jis nėra ištrinamas, jei yra, o jei failo nėra, tada jis sukuriamas.

Lentelė: Galiojančios reikšmės režimus

Reikšmė

Atidaro failą skaitymui. (Pagal numatytuosius nustatymus atidaromas kaip tekstinis failas.)

Sukuria failą rašyti. (Pagal numatytuosius nustatymus atidaromas kaip tekstinis failas.)

Pridedamas prie failo. (Pagal numatytuosius nustatymus atidaromas kaip tekstinis failas.)

Atidaro dvejetainį failą skaitymui.

Atidaro dvejetainį failą rašymui.

Pridedamas prie dvejetainio failo.

Atidaro failą skaitymui / rašymui. (Pagal numatytuosius nustatymus atidaromas kaip tekstinis failas.)

Sukuria skaitymo / rašymo failą. (Pagal numatytuosius nustatymus atidaromas kaip tekstinis failas.)

Prideda arba sukuria skaitymo / rašymo failą. (Pagal numatytuosius nustatymus atidaromas kaip tekstinis failas.)

Atidaro dvejetainį failą skaitymui / rašymui.

Sukuria skaitymo / rašymo dvejetainį failą.

Prideda arba sukuria skaitymo / rašymo dvejetainį failą.

Sukuria tekstinį failą rašymui.

Pridedamas prie tekstinio failo.

Atidaro tekstinį failą skaitymui.

Sukuria tekstinį failą skaitymui / rašymui.

Atidaro arba sukuria tekstinį failą skaitymui / rašymui.

Programuotojui atidaryti failą yra vaizduojamas kaip skaitomų arba rašomų duomenų seka. Kai failas atidaromas, jis susiejamas su I/O srautas . Išvesties informacija įrašoma į srautą, įvesties informacija nuskaitoma iš srauto.

Kai srautas atidaromas I/O, jis susiejamas su standartine FILE struktūra, kuri apibrėžta stdio.h. FILE struktūroje yra reikalinga informacija apie failą.

Failas atidaromas naudojant funkciją fopen(), kuri grąžina žymeklį į FILE tipo struktūrą, kurią galima naudoti tolesnėms failo operacijoms.

FAILAS *fopen(vardas, tipas);

pavadinimas – atidaromo failo pavadinimas (įskaitant kelią),
tipas – žymeklis į simbolių eilutę, apibrėžiančią, kaip pasiekiamas failas:

· „r“ – atverti failą skaitymui (failas turi egzistuoti);

· „w“ – atidarykite tuščią failą rašymui; jei failas egzistuoja, jo turinys prarandamas;

· „a“ – atverti failą rašymui iki galo (pridėjimui); failas sukuriamas, jei jo nėra;

· „r+“ – atverti failą skaitymui ir rašymui (failas turi egzistuoti);

· „w+“ – atidarykite tuščią failą skaitymui ir rašymui; jei failas egzistuoja, jo turinys prarandamas;

· „a+“ – atidarykite failą skaitymui ir pridėjimui, jei failo nėra, jis sukuriamas.

Grąžinama vertė yra rodyklė į atvirą srautą. Jei aptinkama klaida, grąžinama NULL.

Funkcija fclose() uždaro srautą ar srautus, susietus su failais, atidarytais naudojant funkciją fopen(). Uždaromas srautas nustatomas pagal funkcijos fclose() argumentą.

Grąžinama reikšmė: vertė 0, jei srautas buvo sėkmingai uždarytas; pastovus EOF, jei įvyko klaida.

#įtraukti
int main ()

char name="mano.txt";

if(fp = fopen(vardas, "r")!=NULL)

// ar buvo galima atidaryti failą?
... // būtini veiksmai su duomenimis

else printf("Nepavyko atidaryti failo");

Simbolio skaitymas iš failo:

char fgetc(srautas);

Funkcijos argumentas yra rodyklė į FILE tipo srautą. Funkcija grąžina perskaityto simbolio kodą. Jei pasiekiama failo pabaiga arba įvyksta klaida, grąžinamas pastovus EOF.
Simbolio įrašymas į failą:

fputc(char, srautas);

Funkcijos argumentai yra simbolis ir rodyklė į FILE tipo srautą. Funkcija grąžina perskaityto simbolio kodą.

Funkcijos fscanf() ir fprintf() yra panašios į scanf() ir printf() funkcijas, tačiau veikia su duomenų failais, o pirmasis argumentas yra failo rodyklė.

fscanf (srautas, "Įvesties formatas", argumentai);
fprintf(stream, "Išvesties formatas", argumentai);

Funkcijos fgets() ir fputs() skirtos eilučių įvestims/išvestims, jos yra analogiškos funkcijoms gets() ir puts() darbui su failais.

fgets (žymiklis į eilutę, simbolių skaičius, srautas);

Simboliai skaitomi iš srauto, kol nuskaitomas naujos eilutės simbolis „\n“, kuris įtraukiamas į eilutę, arba kol srautas baigiasi EOF arba bus perskaitytas maksimalus simbolių skaičius. Rezultatas dedamas į eilutės žymeklį ir baigiasi nuliniu simboliu „\0“. Funkcija grąžina eilutės adresą.

fputs (rodiklis į eilutę, srautas);

Nukopijuoja eilutę į srautą iš dabartinės padėties. Baigiamasis nulinis simbolis nėra nukopijuotas.
Pavyzdys Įveskite numerį ir išsaugokite jį s1.txt faile. Perskaitykite skaičių iš failo s1.txt, padidinkite jį 3 ir išsaugokite faile s2.txt.

Tekstiniai failai

Pažiūrėkime, kaip dirbti su tekstiniu failu C, naudodami pavyzdį. Sukurkite tekstinį failą C diske pavadinimu TextFile.txt. Šiame faile įveskite šias eilutes:

Eilutė_1 123 eilutė_11, 456
Styga_2
Styga_3

Išsaugokite failą.

Ir tai yra C programos, kuri atidaro mūsų failą ir nuskaito eilutes iš jo, kodas:

/* *Autorius: @author Subbotin B.P..h> #include #define LEN 50 int main(void) ( puts ("Teksto failo operacijos"); char cArray; FILE *pTextFile = fopen("C:\\TextFile.txt", "r"); if(pTextFile == NULL) ( puts("Problems"); return EXIT_FAILURE; ) while(fgets(cArray, LEN, pTextFile) != NULL) ( printf("%s", cArray); ) fclose(pTextFile) return EXIT_SUCCESS;

Norėdami atidaryti tekstinį failą C, naudokite funkciją fopen:

FAILAS *pTextFile = fopen("C:\\Tekstofailas.txt", "r");

Pirmasis funkcijos fopen argumentas nurodo failą, o antrasis sako, kad failas yra atidarytas skaityti iš jo.

Eilutes skaitome naudodami fgets funkciją:

fgets(cArray, LEN, pTextFile);

pirmasis funkcijos fgets argumentas nurodo simbolių masyvą, kuriame bus saugomos gautos eilutės, antrasis argumentas yra maksimalus kiekis simbolių, kuriuos reikia perskaityti, trečiasis yra mūsų failas.

Baigę dirbti su failu, turite jį uždaryti:

fclose(pTextFile);

Mes gauname:

Eilutėse atsiranda ir rusiškų raidžių.

Beje, šią programą sukūriau Eclipse. Galite pamatyti, kaip dirbti su C/C++ programoje Eclipse.

Taigi, atidarėme ir perskaitėme duomenis iš tekstinio failo.

Dabar sužinokime, kaip programiškai sukurti tekstinį failą ir įrašyti į jį duomenis.

/* Autorius: @author Subbotin B.P..h> #įtraukti int main(void) ( FILE *pTextFile = fopen("C:\\TextFileW.txt", "w"); char *cString = "Tai yra eilutė"; char cNewLine = "\n"; int nVal = 123 ; if(pTextFile == NULL) ( puts ("Problemos"); return EXIT_FAILURE; ) fprintf(pTextFile, "%s%c", cString, cNewLine );

Sukurkite tekstinį failą duomenims įrašyti:

FAILAS *pTextFile = fopen("C:\\TextFileW.txt", "w");

jei failas jau yra, jis bus atidarytas ir visi duomenys iš jo bus ištrinti.

C-string cString ir skaičių nVal programa įrašo į tekstinį failą. cNewLine yra tiesiog nauja eilutė.

Duomenis įrašome į tekstinį failą naudodami fprintf funkciją:

fprintf(pTextFile, "%s%c", cString, cNewLine);

pirmasis argumentas yra mūsų failas, antrasis yra formato eilutė, trečiasis ar daugiau yra argumentų, reikalingų šiam formatui, skaičius.



Ar jums patiko straipsnis? Pasidalinkite su draugais!