Extensie pentru fișierul C. Care este extensia pentru fișierul C? clasă fstream: mai mult acces la fișier

Extensie pentru fișierul C. Care este extensia pentru fișierul C? clasă fstream: mai mult acces la fișier

Fișiere text

Să ne uităm la robotul cu fișierul text C din aplicație. Creați un fișier text pe disc numit TextFile.txt. Introduceți următoarele rânduri din acest fișier:

String_1 123 String_11, 456
String_2
String_3

Salvați fișierul.

Și acesta este codul programului în C care deschide fișierul nostru și citește din rândul următor:

/* *Autor: @author Subbotin B.P..h> #include #define LEN 50 int main(void) (puts("Operațiuni cu fișierul text"); char cArray; FILE *pTextFile = fopen("C:\\TextFile.txt", "r"); if(pTextFile == NULL) (puts("Probleme"); return EXIT_FAILURE; ) while(fgets(cArray, LEN, pTextFile) != NULL) ( printf("%s", cArray); ) fclose(pTextFile); return EXIT_SUCCESS; )

Pentru a deschide un fișier text în C, utilizați funcția fopen:

FIȘIER *pTextFile = fopen("C:\TextFile.txt", "r");

Primul argument al funcției fopen indică un fișier, iar celălalt indică faptul că fișierul este deschis pentru citire.

Rândurile sunt luate în considerare de funcția suplimentară fgets:

fgets(cArray, LEN, pTextFile);

Primul argument al funcției fgets indică o matrice de caractere în care vor fi salvate rânduri, celălalt argument indică numărul maxim de caractere care trebuie citite, al treilea este fișierul nostru.

După ce ați terminat lucrul cu fișierul, trebuie să îl închideți:

fclose(pTextFile);

Ignorabil:

Literele rusești trec și ele în rânduri.

Înainte de a vorbi, am obținut acest program de la Eclipse. Puteți vedea cum să utilizați C/C++ în Eclipse.

Ei bine, am aprobat și lăudat datele din fișierul text.

Acum să învățăm cum să creăm în mod programatic un fișier text și să îl scriem într-un fișier nou.

/* Autor: @author Subbotin B.P..h> #include int main(void) ( FILE *pTextFile = fopen("C:\\TextFileW.txt", "w"); char *cString = "Acesta este un șir"; char cNewLine = "\n"; int nVal = 123 ; if(pTextFile == NULL) (puts(„Probleme”); return EXIT_FAILURE; ) fprintf(pTextFile, „%s%c”, cString, cNewLine); fprintf(pTextFile, „%d”, nVal); ;)

Să creăm un fișier text pentru a înregistra date:

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

Dacă fișierul este deja acolo, acesta va fi deschis și toate datele vor fi șterse.

Secvența C cString și numărul nVal sunt scrise de program într-un fișier text. cNewLine – aceasta este pur și simplu o tranziție către un nou rând.

Scriem datele într-un fișier text folosind funcția suplimentară fprintf:

fprintf(pTextFile, „%s%c”, cString, cNewLine);

Primul argument aici este fișierul nostru, al doilea este rândul de format, al treilea și mai mult sunt numărul de argumente necesare pentru acest format.

Fișierele vă permit să citiți o mulțime de date direct de pe disc fără a le introduce de la tastatură. Există două tipuri principale de fișiere: texte și două.

Textovimi Fișierele sunt denumite după orice simbol. Mirosurile sunt organizate în rânduri, fiecare dintre ele se termină cu simbolul „ sfarsitul randului". Sfârșitul fișierului în sine este indicat de simbolul „ sfârşitul fişierului". Când se înregistrează informații într-un fișier text, care poate fi vizualizat folosind orice editor de text, toate datele sunt convertite într-un tip de caracter și salvate sub formă de caractere.

U dublaÎn fișiere, informațiile sunt citite și scrise sub formă de blocuri de dimensiuni diferite, în care pot fi stocate date de orice tip și structură.

Pentru lucrul cu fișiere, sunt utilizate tipuri speciale de date. cursuri. Potik ifstream servesc pentru a lucra cu fișiere ca cititor și ofstreamîn modul captură. Pentru lucrul cu fișiere, atât scrierea cât și citirea, servește ca flux fstream.

Pentru programele C++ care lucrează cu fișiere text, este necesar să se includă biblioteci iostreamі fstream.

Pentru a scrie date într-un fișier text, trebuie să:

  1. descrie tipul malefic ofstream.
  2. deschis.
  3. Introduceți informațiile din fișier.
  4. Evident, închideți fișierul.

Pentru a citi date dintr-un fișier text, trebuie să:

  1. descrie tipul malefic ifstream.
  2. deschideți fișierul pentru funcții suplimentare deschis.
  3. Pentru a extrage informații din fișier, la citirea fiecărei porțiuni a datelor, este necesar să se verifice dacă s-a ajuns la sfârșitul fișierului.
  4. închideți fișierul.

Înregistrarea informațiilor într-un fișier text

După cum sa menționat mai devreme, pentru a începe să lucrați cu un fișier text, trebuie să descrieți tipul modificării ofstream. De exemplu, așa:

din fluxul F;

Se va face schimbare F pentru a înregistra informații într-un fișier. În această etapă, fișierul trebuie deschis pentru scriere. Operatorul din fața fluxului de material arată astfel:

F.deschis("fişier", modul);

Aici F- zminna, descris ca ofstream, fişier- în afara numelui fișierului de pe disc, modul- modul de lucru cu un fișier care este deschis. Vă rugăm să rețineți că atunci când dați un nume permanent fișierului, trebuie să puneți o bară oblică finală. Pentru animale, de exemplu, la dosar accounts.txt, ce este în tati site-uri pe disc D, programul trebuie să specifice: D:\\site-uri\\ conturi.TXT.

Fișierul poate fi deschis în unul dintre următoarele moduri:

  • ios::in- Deschideți fișierul în modul citire date; mod - modul standard pentru fluxuri ifstream;
  • ios::out- deschideți fișierul în modul de înregistrare a datelor (caz în care sunt afișate informații despre fișierul existent); mod - modul de spălare pentru fluxuri ofstream;
  • ios::app- Deschideți fișierul în modul de scriere a datelor până la sfârșitul fișierului;
  • ios::ate- Mutați la sfârșitul fișierului deja închis;
  • ios::trunc- ștergeți fișierul, care este afișat în modul ios::out;
  • ios::nocreate- nu anulați operațiunea pe dosar, deoarece nu funcționează;
  • ios::noreplace- nu deschideți fișierul existent.

Parametrul mod poate fi orice tip în care fișierul este deschis în modul de spălare pentru acel flux.

După deschiderea în continuare a fișierului (în orice mod) F va fi salvat Adevărat, în alt caz fals. Acest lucru vă permite să verificați corectitudinea operațiunii din fișier.

Deschideți fișierul (de exemplu, luați fișierul D:\\site-uri\\ conturi.TXT) în modul înregistrare, puteți utiliza una dintre următoarele metode:

După deschiderea unui fișier în modul de înregistrare, va fi creat un fișier gol care poate fi folosit pentru a înregistra informații.

Dacă doriți să deschideți fișierul curent în modul de adăugare, atunci în modul de urmărire va trebui să selectați valorile ios::app.

După deschiderea unui fișier în modul de înregistrare, puteți scrie în el la fel ca pe ecran, doar în locul dispozitivului de ieșire standard cout Trebuie să introduceți numele fișierului închis.

De exemplu, pentru a înregistra într-un flux F schimbătoare A, operator vivodu matime viglyad:

F<

Pentru afișare consecventă în flux G semnificativ b, c, d Operatorul de randare va arăta astfel:

G<

Fluxul va fi închis pentru asistență din partea operatorului:

F.close();

Să aruncăm o privire la fund așa.

Zavdannya 1

Creați un fișier text D:\\ site-uri\\conturi .TXTși notează până data viitoare n numere operaționale.

Decizie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

#include „stdafx.h”
#include
#include
#include
folosind namespace std;
int main()
{

int i, n;
dublu a;
//descrie firul pentru scrierea datelor în fișier
ofstream f;
//deschideți fișierul în modul de înregistrare,
Modul //ios::out este setat implicit
f.deschide ("D: \\sites\\accounts.txt", ios::out);
//introduceți un număr de numere active
cout<< «n=» ; cin >>n;
//ciclu pentru introducerea numerelor reale
//i înregistrează fișierul ix y
pentru (i = 0; i< n; i++ )
{
cout<< «a=» ;
//introduceți un număr
cin >> a;
f<< a<< «\t «;
}
//închide fluxul
f.close();
sistem(„pauză”);
întoarce 0;
}

Citirea informațiilor dintr-un fișier text

Pentru a citi informații dintr-un fișier text, trebuie să descrieți tipul modificării ifstream. După aceasta, trebuie să deschideți fișierul pentru citire de către operator deschis. Cum ar trebui să numesc minionul? F, atunci primii doi operatori vor fi astfel:

După deschiderea unui fișier în modul de citire, puteți citi informațiile din el la fel ca de la tastatură, doar în schimb cin Este necesar să indicați firului din care vor fi citite datele.

De exemplu, pentru a citi date dintr-un flux F la zminnu A, operatorul de intrare arată astfel:

F>>a;

Două numere dintr-un editor de text sunt considerate separate, deoarece între ele doriți unul dintre simbolurile: spațiu, tab, simbol de sfârșit de rând. Ar fi bine dacă programul în viitor știe câte și ce valori sunt salvate în fișierul text. Cu toate acestea, tipul de valori care sunt salvate în fișier este adesea necunoscut, iar numărul acestora poate varia. Pentru a rezolva această problemă, este necesar să citiți valorile din fișier una câte una și, înainte de fiecare citire, verificați dacă s-a ajuns la sfârșitul fișierului. Și vă va ajuta să dezvoltați această funcție F.eof(). Aici F- funcția atribuită firului de execuție rotește valorile logice: Adevărat sau fals, înainte de a se ajunge la sfârșitul fișierului.

Deci, ciclul de citire în loc de întregul fișier poate fi scris astfel:

Pentru a înțelege mai bine materialul, să aruncăm o privire asupra fundalului.

Zavdannya 2

Fișierul text D:\game\accounts.txt salvează numerele de vorbire, le afișează pe ecran și le calculează numărul.

Decizie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

#include „stdafx.h”
#include
#include
#include
#include
folosind namespace std;
int main()
{
setlocale(LC_ALL, "RUS");
int n = 0;
plutire a;
fstream F;
//deschide fișierul în modul de citire
F.deschide ("D: \\sites\\accounts.txt") ;
//dacă decriptarea fișierului a mers corect, atunci
dacă (F)
{
//ciclu pentru citirea valorii din fișier; ciclul viconic se va rupe,
//Când se ajunge la sfârșitul fișierului, F.eof() returnează true.
în timp ce (!f.eof())
{
//citirea valorii draft pentru a curge F în valoarea a
F >> a;
//Afișează valoarea modificării pe ecran
cout<< a<< «\t «;
//număr crescut de numere de tratament
n++;
}
//închide fluxul
F.close();
//Introduceți un număr de numere de tratament pe ecran
cout<< «n=» << n<< endl;
}
//dacă fișierul nu a fost procesat corect, din nou
//informații despre existența unui astfel de fișier
altfel cout<< „Fișierul nu funcționează”<< endl;
sistem(„pauză”);
întoarce 0;
}

Aceasta încheie lecția extinsă despre fișierele text. Următorul articol va analiza metodele de manipulare, inclusiv cele care folosesc C++.

Funcția fopen() deschide un alt flux, asociază un fișier cu acel flux și apoi rotește indicatorul FILE la acel flux. Cel mai adesea fișierul este procesat ca fișier disc. Funcția fopen() are următorul prototip:

FILE *fopen(const char *filename, const char *mode);

Modul indică ordinea în care urmează să fie deschis fișierul. Valorile valide pentru modul Borland C++ sunt afișate în tabel. File_name este o serie de simboluri care dă numele corect fișierului de pe sistemul de operare și poate fi plasat în substituent.

Funcția fopen() convertește fișierul în tipul de bază FILE. Acest indicator identifică fișierul și este o funcție majoră a sistemului de fișiere. Nu ar trebui să-l schimbi niciodată pe cont propriu. Funcția rotește indicatorul zero, deoarece fișierul nu poate fi deschis.

După cum arată tabelul, fișierul poate fi deschis fie în text, fie în mod dual. În modul text, de îndată ce este introdusă secvența de rotație a căruciorului și transferul rândului, simbolul noului rând este difuzat. Când este afișată inversarea corectă: simbolul noului rând este afișat ca rotație a căruciorului și inversarea rândului. Nu există o astfel de traducere în fișiere duble. Dacă nici t, nici b nu sunt atribuite argumentelor de mod, atunci starea fișierului text/dublu este atribuită valorilor variabilei globale _fmode definite în Borland III++. După promovare, fmode este setat la O_TEXT, deci modul text este instalat. Dacă setați _fmode la O_BINARY, fișierele vor fi deschise în modul dual. (Această macrocomandă este definită în fcntl.h.) Desigur, schimbarea sensului explicit t sau b elimină efectele asociate cu schimbarea _fmode. Cu toate acestea, _fmode este unic pentru produsele Borland. Win-ul nu este inclus în sistemul ANSI de intrare/ieșire.

Dacă trebuie să deschideți fișierul numit test pentru scriere, scrieți următoarele:

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

De fp este același cu tipul FILE*. Prote zazvichay se poate face astfel:

If((fp = fopen(„test”, „w”))==NULL) (
puts("Nu se poate deschide fișierul.");
ieșire(1);
}

Această metodă vă permite să detectați probleme în timpul deschiderii fișierului, de exemplu, prezența unei blocări de scriere sau prezența spațiului liber pe disc.

Deoarece fopen() este folosit pentru a deschide un fișier pentru scriere, orice fișier anterior cu numele atribuite va fi șters. Dacă nu există niciun fișier cu numele specificate, acesta va fi creat.

Dacă trebuie să adăugați informații la sfârșitul fișierului, selectați modul A (adăugare). Dacă fișierul nu este activ, acesta nu va fi creat.

Deschiderea fișierului pentru citire înseamnă că fișierul este clar. Dacă fișierul nu funcționează, fișierul va fi returnat. Dacă fișierul este deschis pentru o operație de citire/scriere, nu este șters în mod explicit, iar dacă fișierul este silențios, este creat.

Tabel: Valori de mod acceptabile

Semnificaţie

Deschide fișierul pentru citire. (Este deschis ca fișier text.)

Creez un fișier pentru înregistrare. (Este deschis ca fișier text.)

Vine la dosar. (Este deschis ca fișier text.)

Deschide un fișier dublu pentru citire.

Deschide un fișier dublu pentru scriere.

Vine la fișierul binar.

Deschide fișierul pentru citire/scriere. (Este deschis ca fișier text.)

Creați un fișier pentru citire/scriere. (Este deschis ca fișier text.)

Sosesc sau creez un fișier pentru citire/scriere. (Este deschis ca fișier text.)

Deschide un fișier dublu pentru citire/scriere.

Creează un fișier dublu pentru citire/scriere.

Adaugă sau creează un fișier dublu pentru citire/scriere.

Creați un fișier text pentru înregistrare.

Este inclus un fișier text.

Deschide un fișier text pentru citire.

Creați un fișier text pentru citire/scriere.

Deschide sau creează un fișier text pentru citire/scriere.

Ultima actualizare: 25.10.2017

Pentru a lucra cu fișiere, biblioteca standard are un fișier antet fstream, care indică tipurile de bază pentru citirea și scrierea fișierelor. Zokrema, tse:

    ifstream: pentru citirea dintr-un fișier

    ofstream : pentru scrierea într-un fișier

    fstream: ultima scriere și citire

Pentru lucrul cu date de tip wchar_t, acestor fluxuri li se atribuie gemeni:

    wifstream

    wofstream

    wfstream

Tip fișier

Când efectuați operațiuni pe un fișier, mai întâi trebuie să deschideți fișierul folosind funcția suplimentară open(). Această funcție are două versiuni:

  • deschis (mod, mod)

Pentru a deschide un fișier într-o funcție, trebuie să treceți calea către fișier în vizualizarea rând. De asemenea, puteți seta modul de așteptare. Lista modurilor de fișiere disponibile:

    ios::in : fișierul este deschis pentru introducere (citire). Puteți instala numai pentru obiectul ifstream sau fstream

    ios::out : Fișierul este deschis pentru afișare (scriere). În acest caz, datele vechi vor fi șterse. Puteți instala numai pentru obiectul ofstream sau fstream

    ios::app: fișierul este deschis pentru scriere. Datele vechi nu sunt vizibile.

    ios::ate : După deschiderea unui fișier, mută indicatorul la sfârșitul fișierului

    ios::trunc: fișierul este trunchiat după ora de scriere. De asemenea, îl puteți instala dacă este instalat și modul de ieșire

    ios::binary : fișierul este deschis în modul binar

Dacă modul nu este specificat când este activat, atunci modul ios::out este setat pentru obiectele ofstream, iar modul ios::in pentru obiectele ifstream. Pentru obiectele fstream, sunt folosite modurile ios::out și ios::in.

Std::ofstream out; // flux pentru înregistrare out.open("D:\hello1.txt"); // Deschiderea fișierului pentru scrierea std:: ofstream out2; out2.open("D:\hello2.txt", std::ios::app); // Deschiderea fișierului pentru înregistrare suplimentară std:: ofstream out3; out2.open("D:\hello3.txt", std::ios::out | std::ios::trunc); // instalarea mai multor moduri std::ifstream in; // flux pentru citire in.open("D:\hello4.txt"); // Deschideți fișierul pentru citirea std::fstream fs; // flux pentru citire-scriere fs.open("D:\hello5.txt"); // Deschideți fișierul pentru citire-scriere

Cu toate acestea, în principiu, nu este necesar să folosiți funcția de deschidere pentru a deschide un fișier. Ca alternativă, puteți utiliza, de asemenea, constructorul de obiecte flux și le puteți transmite calea către fișier și modul de ieșire:

Fstream(cale) fstream(cale, mod)

Când este apelat constructorul, care este transmis fișierului, acest fișier va fi deschis automat:

Std::ofstream out("D:\\hello.txt"); std::ifstream in("D:\\hello.txt"); std::fstream fs("D:\\hello.txt", std::ios::app);

Aici am folosit un set de constructori pentru a deschide fluxul și a reduce valoarea variabilei care reprezintă fluxul de fișiere, care presupune, de asemenea, că acest flux va fi deschis pentru citire sau scriere. Și răutatea designerului va salva situația dacă uităm să deschidem fluxul, altfel în cazul în care îl vom denigra cu siguranță.

În acest proces, putem verifica dacă fișierul din spatele funcției suplimentare este_open() . Dacă fișierul este deschis, devine adevărat:

Std::ifstream in; // flux pentru citire in.open("D:\hello.txt"); // deschide fișierul pentru citire // dacă fișierul este deschis dacă (in.is_open()) ( )

Închideți fișierul

După ce ați terminat de lucrat cu fișierul, închideți urma folosind funcția suplimentară close() . De asemenea, este important de menționat că atunci când un obiect iese din flux din zona de vizibilitate, venele sunt vizibile, iar funcția sa de închidere este activată automat.

#include #include int main() ( std::ofstream out; // flux pentru înregistrare out.open("D:\\hello.txt"); // deschiderea fișierului pentru înregistrare out.close(); // închiderea fișierului std :: ifstream in; // flux pentru citire in.open("D:\\hello.txt"); // deschiderea fișierului pentru citire in.close(); // închiderea fișierului std::fstream fs; // flux pentru citire -write fs.open("D:\\hello.txt"); // deschide fișierul pentru citire-scriere fs.close(); // închide fișierul return 0;

Vă rugăm să rețineți că atunci când compilați prin g++, utilizați indicatorul -static când compilați prin g++, deoarece programul lucrează cu fișiere și selectează tipuri din fișierul antet fstream.

 

 

Tse tsikavo: