file input output operations c
Un estudi sobre les operacions de sortida d’entrada de fitxers i les funcions del punter de fitxer a C ++.
A la programació en temps real, tractem grans trossos de dades que no es poden allotjar des de dispositius d’entrada-sortida estàndard. Per tant, hem d’utilitzar l’emmagatzematge secundari per emmagatzemar dades. Mitjançant l’ús d’emmagatzematge secundari, normalment emmagatzemem dades en forma de fitxers.
Podem llegir dades de fitxers o escriure-les en fitxers mitjançant una seqüència de dades anomenades fluxos en format de text o binari. Hi ha diverses operacions d'entrada / sortida i altres relacionades amb fitxers en C ++. Aquest tutorial explica aquestes operacions relacionades amb fitxers que utilitzen diverses classes.
=> Visiteu aquí la sèrie exclusiva de cursos de formació C ++.
Què aprendreu:
Classes d'entrada / sortida de fitxers en C ++
Hem vist una classe iostream en C ++ que defineix la funcionalitat estàndard d’entrada i sortida, incloent cin i cout. Aquesta classe es limita als dispositius d’entrada i sortida estàndard, com ara el teclat i el monitor, respectivament.
Quan es tracta d’operacions de fitxers, C ++ té un conjunt diferent de classes que es poden utilitzar.
Aquestes classes es descriuen a continuació:
- Ofstream: Classe de tractament de fitxers que significa el flux de fitxers de sortida i que s’utilitza per escriure dades a fitxers.
- Ifstream: Classe de maneig de fitxers que significa el flux de fitxers d’entrada i que s’utilitza per llegir dades del fitxer.
- Fstream: Classe de maneig de fitxers que té la capacitat de gestionar tant flux com fora de línia. Es pot utilitzar per llegir i escriure en un fitxer.
Al Gestió de fitxers C ++ s'admeten les operacions següents:
- Obriu un fitxer
- Tanqueu un fitxer
- Llegit des d’un fitxer
- Escriviu a un fitxer
Vegem detalladament cadascuna d’aquestes operacions!
Obriu un fitxer
Associar l'objecte d'una de les classes de flux a un fitxer per llegir o escriure o ambdues coses s'anomena obertura d'un fitxer. Un fitxer obert es representa en codi mitjançant aquest objecte de flux. Així, qualsevol operació de lectura / escriptura realitzada en aquest objecte de flux també s'aplicarà al fitxer físic.
La sintaxi general per obrir un fitxer amb el flux és:
void open(const char* filename, ios::open mode mode)
Aquí,
filename => La cadena que conté el camí i el nom del fitxer a obrir.
mode => Paràmetre opcional que indica el mode en què s'ha d'obrir el fitxer.
C ++ admet diversos modes en què es pot obrir el fitxer. També podem especificar una combinació d’aquests modes mitjançant l’operador OR.
implementació de la funció hash c ++
Mode d'arxiu | Descripció |
---|---|
ios :: in | Obre el fitxer en mode d’entrada per llegir. |
ios :: fora | Obre el fitxer en mode de sortida per escriure dades al fitxer. |
ios :: va menjar | Estableix la posició inicial al final del fitxer. Si no es defineix el final del fitxer del fitxer, la posició inicial es defineix al començament del fitxer. |
ios :: trunc | Si el fitxer s'obre per escriure i ja té contingut, el contingut es truncarà. |
ios :: app | Obre el fitxer en mode d'afegir de manera que s'afegeixi tot el contingut al final del fitxer. |
ios :: binari | Obre el fitxer en mode binari. |
Per exemple,si volem obrir un fitxer 'myfile.dat' per afegir dades en mode binari, podem escriure el següent codi.
ofstream myfile;
myfile.open(“myfile.dat”, ios::out|ios::app|ios::binary);
Com ja s'ha esmentat, el paràmetre mode és opcional. Quan obrim un fitxer sense especificar el segon paràmetre, una funció de membre obert ofstream, ifstream o fstream té un mode per defecte amb el qual obrir el fitxer.
Es donen de la següent manera:
Classe | Mode per defecte |
---|---|
Ifstream | ios :: in |
ofstream | ios :: fora |
Fstream | ios :: in | ios :: out |
Per tant, si no especifiquem el segon paràmetre a la funció oberta, en funció de la classe de flux utilitzada, el fitxer s’obre amb el mode per defecte.
Tancant un fitxer
Podem utilitzar la funció de tancament per tancar un fitxer i alliberar els recursos que té el fitxer quan acabem amb les operacions d’entrada i sortida d’un fitxer.
La funció per tancar un fitxer és:
void close()
Per tant, quan hàgim acabat les operacions del fitxer anterior myfile, podem tancar el fitxer de la següent manera:
myfile.close();
Un cop el fitxer es tanca mitjançant la funció de tancament, l'objecte de fitxer associat es pot tornar a utilitzar per obrir un altre fitxer.
Lectura des d’un fitxer
Podem llegir la informació d’un fitxer línia per línia mitjançant l’operador d’extracció de flux (>>). Això és similar a la lectura de l'entrada de l'entrada estàndard mitjançant cin. L'única diferència és en el cas dels fitxers, utilitzem objecte ifstream o fstream en lloc de cin.
A continuació es mostra un codi de mostra per llegir des d’un fitxer:
ifstream myfile; myfile.open(“samp_file.txt”); cout<<”Reading from a file”<>data; cout<Al codi anterior, obrim un fitxer i, mitjançant l'operador d'extracció de flux (>>), llegim el contingut del fitxer. Un cop feta la lectura, podem tancar el fitxer.
Escrivint a un fitxer
També podem escriure dades en un fitxer mitjançant les operacions del fitxer. L'operador que fem servir per escriure dades a un fitxer és un operador d'inserció de flux (<<). 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.
Considerem el següent exemple de codi:
char data(100); ofstream myfile; myfile.open(“samp_file.txt”); cout<<”Enter the string to be written to file”<Aquí llegim una línia de l'entrada i l'escrivim en un fitxer que s'ha obert amb l'objecte ofstream.
A l'exemple de codi següent, proporcionem una demostració de totes les operacions de manipulació de fitxers.
#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; }
Sortida:
S'està escrivint al fitxer
Introduïu el vostre nom: Ved
Introduïu la vostra edat: 7
Lectura des d’un fitxer
Per
7
protocol i port del sistema de transferència de fitxers segur
Primer, al programa anterior, obrim un fitxer en mode d’escriptura. Després llegim les dades, és a dir, el nom i l’edat, i les escrivim en un fitxer. A continuació, tanquem aquest fitxer. A continuació, obrim el mateix fitxer en mode de lectura i llegim les dades línia per línia des del fitxer i el publiquem a la pantalla.
Per tant, aquest programa cobreix totes les operacions d'E / S de fitxers.
Fitxer Estat Escòries
Hi ha algunes funcions de membres que s’utilitzen per comprovar l’estat del fitxer. Totes aquestes funcions retornen un valor booleà.
Hem tabulat aquestes funcions de la següent manera:
Funció Descripció eof () Retorna cert si s'arriba al final del fitxer mentre es llegeix el fitxer. fallar () Retorna cert quan falla l'operació de lectura / escriptura o es produeix un error de format dolent() Torna cert si la lectura o l'escriptura d'un fitxer fallen. bé () Retorna fals en els mateixos casos en què cridar qualsevol de les funcions anteriors tornaria a ser cert.
Get / Put i altres operacions especials
Els fluxos d'E / S de fitxers que hem vist fins ara tenen una posició interna de get i posició similar a la resta de fluxos d'E / S com iostream.
La classe ifstream té una posició get interna que conté la ubicació de l’element / caràcter que cal llegir al fitxer en la següent operació d’entrada. La classe ofstream té una posició put interna que conté la ubicació de l’element / caràcter que s’escriurà a la següent operació de sortida.
Per cert, fstream té posicions get i put.
Per facilitar la lectura i l'escriptura mitjançant aquestes posicions, tenim algunes funcions de membres que s'utilitzen per observar i modificar aquestes posicions.
Aquestes funcions es detallen a continuació:
Funcions Descripció tellg () Retorna la posició actual del punter get tellp () Retorna la posició actual del punter put seekg (posició) Els moviments obtenen un punter a la ubicació especificada comptant des del principi del fitxer seekg (desplaçament, direcció) Els moviments obtenen un punter per compensar el valor relatiu al punt donat per la direcció del paràmetre. seekp (posició) Els moviments posen un punter a la ubicació especificada comptant des del començament del fitxer seekp (desplaçament, direcció) Els moviments posen un punter per compensar el valor relatiu al punt donat per la direcció del paràmetre.
El paràmetre direcció donat en els prototips de funció anteriors és un enumerats tipus de tipus seekdir i determina el punt a partir del qual es compta l'offset.
Pot tenir els valors següents.
ios :: suplica Desplaçament des del començament de la reproducció ios :: cur Desplaçament respecte a la posició actual ios :: final Desplaçament des del final de la reproducció
Vegem un exemple complet que demostra l’ús d’aquestes funcions.
#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'< Sortida:
S'ha creat un fitxer nou
Posició inicial del punter del fitxer a: 34
Després de seekp (-1, ios :: cur), Posició del punter del fitxer a: 33
Després de seekg (5, ios :: beg), File Pointer a: 5
Després de seekg (1, ios :: cur), File Pointer a: 6
Com es mostra al programa anterior, tenim un fitxer creat en el qual escrivim una línia de text. A continuació, utilitzant les diverses funcions descrites anteriorment, mostrem diverses posicions del punter del fitxer.
millor convertidor de vídeo de YouTube a mp3
Conclusió
En aquest tutorial, hem vist les diverses operacions de fitxers per obrir, tancar i llegir / escriure dades des d'un fitxer.
També hem vist les funcions per canviar el punter del fitxer per accedir a posicions específiques del fitxer. En els nostres tutorials posteriors, tractarem alguns temes més importants relacionats amb C ++.
=> Llegiu la sèrie de formació Easy C ++.
Lectura recomanada
- Operacions bàsiques d'entrada / sortida en C ++
- Entrada-sortida i fitxers a Python (Python Obrir, llegir i escriure al fitxer)
- Operacions bàsiques d'E / S a Java (fluxos d'entrada / sortida)
- Manipulació de fitxers a Unix: Visió general del sistema de fitxers Unix
- Caràcters especials o metacaràcters Unix per a la manipulació de fitxers
- Permisos d'accés a fitxers Unix: Unix Chmod, Chown i Chgrp
- Objectes de fitxer VBScript: CopyFile, DeleteFile, OpenTextFile, lectura i escriptura de fitxers de text
- Desplegament de Java: creació i execució del fitxer JAR de Java