file input output operations c
Un studiu privind operațiile de ieșire de intrare a fișierelor și funcțiile indicatorului de fișier în C ++.
În programarea în timp real, ne ocupăm de bucăți mari de date care nu pot fi acceptate de pe dispozitivele standard de intrare-ieșire. Prin urmare, trebuie să folosim stocarea secundară pentru stocarea datelor. Folosind stocarea secundară stocăm de obicei datele sub formă de fișiere.
Putem citi date din fișiere sau scrie date în fișiere utilizând o secvență de date numite fluxuri fie în format text, fie în format binar. Există diverse intrări / ieșiri și alte operațiuni legate de fișiere în C ++. Acest tutorial explică aceste operațiuni legate de fișiere folosind diferite clase.
=> Vizitați aici pentru seria exclusivă de instruire C ++ Training.
Ce veți învăța:
Clase de intrare / ieșire fișiere în C ++
Am văzut o clasă iostream în C ++ care definește funcționalitatea standard de intrare și ieșire, inclusiv cin și cout. Această clasă este limitată la dispozitivele standard de intrare și ieșire, cum ar fi tastatura și respectiv monitorul.
Când vine vorba de operații de fișier, C ++ are un set diferit de clase care pot fi utilizate.
Aceste clase sunt descrise mai jos:
- Ofstream: Clasa de manipulare a fișierelor care semnifică fluxul de fișiere de ieșire și este utilizată pentru scrierea datelor în fișiere.
- Ifstream: Clasa de manipulare a fișierelor care semnifică fluxul de fișiere de intrare și este utilizată pentru citirea datelor din fișier.
- Fstream: Clasa de manipulare a fișierelor care are capacitatea de a gestiona atât ifstream, cât și ofstream. Poate fi folosit pentru a citi și a scrie într-un fișier.
Următoarele operații sunt acceptate în C ++ File Handling:
- Deschideți un fișier
- Închideți un fișier
- Citiți dintr-un fișier
- Scrieți într-un fișier
Să vedem fiecare dintre aceste operațiuni în detaliu !!
Deschideți un fișier
Asocierea obiectului uneia dintre clasele de flux la un fișier fie pentru citire, fie pentru scriere sau ambele se numește deschiderea unui fișier. Un fișier deschis este reprezentat în cod utilizând acest obiect de flux. Astfel, orice operație de citire / scriere efectuată pe acest obiect de flux va fi aplicată și fișierului fizic.
Sintaxa generală pentru a deschide un fișier cu fluxul este:
void open(const char* filename, ios::open mode mode)
Aici,
filename => Șirul care conține calea și numele fișierului care urmează să fie deschis.
mode => Parametru opțional care indică modul în care fișierul urmează să fie deschis.
C ++ acceptă diferite moduri în care fișierul poate fi deschis. De asemenea, putem specifica o combinație a acestor moduri folosind operatorul OR.
ce program va deschide un fișier eps
Mod fișier | Descriere |
---|---|
ios :: in | Deschide fișierul în modul de intrare pentru citire. |
ios :: afară | Deschide fișierul în modul de ieșire pentru scrierea datelor în fișier. |
ios :: ate | Setați poziția inițială la sfârșitul fișierului. Dacă sfârșitul semnalizatorului de fișier nu este setat, poziția inițială este setată la începutul fișierului. |
ios :: trunc | Dacă fișierul este deschis pentru scriere și are deja conținut, conținutul este trunchiat. |
ios :: app | Deschide fișierul în modul de adăugare astfel încât tot conținutul să fie adăugat la sfârșitul fișierului. |
ios :: binar | Deschide fișierul în modul binar. |
De exemplu,dacă dorim să deschidem un fișier „myfile.dat” pentru a adăuga date în modul binar, atunci putem scrie următorul cod.
ofstream myfile;
myfile.open(“myfile.dat”, ios::out|ios::app|ios::binary);
După cum sa menționat deja, parametrul de mod este opțional. Când deschidem un fișier fără a specifica al doilea parametru, o funcție de membru deschis de ofstream, ifstream sau fstream are un mod implicit pentru a deschide fișierul.
Acestea sunt date după cum urmează:
cum să solicitați promovare în evaluarea performanței
Clasă | Mod automat |
---|---|
Ifstream | ios :: in |
ofstream | ios :: afară |
Fstream | ios :: in | ios :: out |
Deci, dacă nu specificăm al doilea parametru în funcția de deschidere, în funcție de clasa de flux utilizată, fișierul este deschis cu modul implicit.
Închiderea unui fișier
Putem folosi funcția de închidere pentru a închide un fișier și a elibera resursele deținute de fișier când terminăm operațiunile de intrare și ieșire pe un fișier.
Funcția de închidere a unui fișier este:
void close()
Deci, când am terminat operațiunile de pe fișierul de mai sus myfile, putem închide fișierul după cum urmează:
myfile.close();
Odată ce fișierul este închis utilizând funcția de închidere, obiectul de fișier asociat poate fi refolosit pentru a deschide un alt fișier.
Citirea dintr-un fișier
Putem citi informațiile dintr-un fișier linie cu linie folosind operatorul de extragere a fluxului (>>). Acest lucru este similar cu citirea intrării de la intrarea standard folosind cin. Singura diferență fiind în cazul fișierelor, folosim obiectul ifstream sau fstream în loc de cin.
Exemplul de cod pentru citirea dintr-un fișier este dat mai jos:
ifstream myfile; myfile.open(“samp_file.txt”); cout<<”Reading from a file”<>data; cout<În codul de mai sus, deschidem un fișier și folosind operatorul de extragere a fluxului (>>), citim conținutul fișierului. Odată ce ați terminat cu citirea, putem închide fișierul.
Scrierea într-un fișier
De asemenea, putem scrie date într-un fișier folosind operațiile de fișier. Operatorul pe care îl folosim pentru a scrie date într-un fișier este un operator de inserare a fluxului (<<). Once again this is the same operator that we use to print data to a standard output device using cout. Difference between the two is that for file related writing we use ofstream or fstream object.
Să luăm în considerare următorul exemplu de cod:
char data(100); ofstream myfile; myfile.open(“samp_file.txt”); cout<<”Enter the string to be written to file”<Aici, citim o linie din intrare și o scriem într-un fișier care a fost deschis cu obiectul ofstream.
În exemplul de cod de mai jos, oferim o demonstrație a tuturor operațiunilor de manipulare a fișierelor.
#include #include using namespace std; int main () { char data(100); // opening a file in write mode. ofstream myfile; myfile.open('E:\message.txt'); cout << 'Writing to the file' << endl; cout << 'Enter your name: '; cin.getline(data, 100); myfile << data << endl; cout <> data; cin.ignore(); myfile << data << endl; // close the opened file. myfile.close(); // opening a file in read mode. ifstream infile; infile.open('E:\message.txt'); cout << 'Reading from a file' <> data; cout << data <> data; cout << data << endl; infile.close(); return 0; }
Ieșire:
Scrierea în fișier
Introduceți numele dvs.: Ved
Introduceți vârsta: 7
Citirea dintr-un fișier
De
7
Mai întâi în programul de mai sus, deschidem un fișier în modul de scriere. Apoi citim date, adică numele și vârsta și le scriem într-un fișier. Închidem apoi acest fișier. Apoi, deschidem același fișier în modul de citire și citim datele linie cu linie din fișier și îl scoatem pe ecran.
Astfel, acest program acoperă toate operațiunile I / O ale fișierelor.
File State Slags
Există câteva funcții membre care sunt utilizate pentru a verifica starea fișierului. Toate aceste funcții returnează o valoare booleană.
Am tabelat aceste funcții după cum urmează:
Funcţie Descriere eof () Returnează adevărat dacă se ajunge la sfârșitul fișierului în timp ce citiți fișierul. fail () Returnează adevărat atunci când operația de citire / scriere eșuează sau apare o eroare de format rău() Returnează adevărat dacă citirea sau scrierea într-un fișier nu reușesc. bun() Returnează fals în aceleași cazuri în care apelarea oricăreia dintre funcțiile de mai sus ar reveni adevărat.
Obțineți / puneți și alte operațiuni speciale
Fluxurile de fluxuri I / O pe care le-am văzut până acum au o poziție internă get și plasă similară celorlalte fluxuri I / O, cum ar fi iostream.
Clasa ifstream are o poziție internă get care conține locația elementului / caracterului care trebuie citit în fișier în următoarea operație de intrare. Clasa ofstream are o poziție de put intern care conține locația elementului / caracterului care trebuie scris în următoarea operație de ieșire.
De altfel, fstream are atât poziții de obținere, cât și poziții.
Pentru a facilita citirea și scrierea folosind aceste poziții, avem câteva funcții ale membrilor care sunt utilizate pentru a observa și modifica aceste poziții.
Aceste funcții sunt enumerate mai jos:
Funcții Descriere tellg () Returnează poziția actuală a indicatorului get tellp () Returnează poziția curentă a indicatorului put seekg (poziție) Deplasările obțin un pointer către locația specificată numărând de la începutul fișierului seekg (offset, direcție) Deplasările obțin un pointer pentru a compensa valoarea în raport cu punctul dat de direcția parametrului. seekp (poziție) Mutare pune un pointer la locația specificată numărând de la începutul fișierului seekp (offset, direcție) Mutare pune un pointer pentru a compensa valoarea în raport cu punctul dat de direcția parametrului.
Parametrul direcţie dat în prototipurile funcției de mai sus este un enumerate tipul de tip seekdir și determină punctul din care este numărat decalajul.
Poate avea următoarele valori.
ios :: implora Decalat de la începutul fluxului ios :: cur Decalat față de poziția curentă ios :: sfârșit Decalat de la sfârșitul fluxului
Să vedem un exemplu complet care demonstrează utilizarea acestor funcții.
ce serviciu de e-mail ar trebui să folosesc
#include #include using namespace std; int main() { fstream myfile; myfile.open('E:\myfile.txt',ios::out); if(!myfile) { cout<<'Cannot create File...'; } else { cout<<'New file created'< Ieșire:
Fișier nou creat
Poziția inițială a indicatorului fișierului la: 34
După seekp (-1, ios :: cur), Pointer Pointer File la: 33
După seekg (5, ios :: beg), File Pointer la: 5
După seekg (1, ios :: cur), File Pointer la: 6
Așa cum se arată în programul de mai sus, avem un fișier creat în care scriem o linie de text. Apoi, folosind diferitele funcții descrise mai sus, afișăm diferite poziții ale indicatorului de fișier.
Concluzie
În acest tutorial, am văzut diferitele operații ale fișierelor pentru a deschide, închide și citi / scrie date dintr-un fișier.
De asemenea, am văzut funcțiile de schimbare a indicatorului fișierului pentru a accesa poziții specifice din fișier. În tutorialele noastre ulterioare, vom discuta câteva subiecte mai importante legate de C ++.
=> Citiți seria Easy C ++ Training.
Lectură recomandată
- Operațiuni de intrare / ieșire de bază în C ++
- Intrare-ieșire și fișiere în Python (Python Deschideți, citiți și scrieți în fișier)
- Operațiuni de bază I / O în Java (fluxuri de intrare / ieșire)
- Manipularea fișierelor în Unix: Prezentare generală a sistemului de fișiere Unix
- Unix Caractere speciale sau metacaractere pentru manipularea fișierelor
- Permisiuni de acces la fișierele Unix: Unix Chmod, Chown și Chgrp
- Obiecte de fișiere VBScript: CopyFile, DeleteFile, OpenTextFile, Read and Write Text File
- Implementarea Java: crearea și executarea fișierului Java JAR