Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

File I/O in C++ Beheersen: Lezen en Schrijven met fstream

Tot nu toe hebben we de iostream standaardbibliotheek gebruikt, die cin en cout methoden biedt voor het lezen van standaardinvoer en schrijven naar standaarduitvoer respectievelijk.

Deze tutorial leert u hoe u van een bestand kunt lezen en schrijven. Dit vereist een andere standaard C++ bibliotheek genaamd fstream, die drie nieuwe datatypen definieert:

Nr. Datatype & Beschrijving
1

ofstream

Dit datatype vertegenwoordigt de output file stream en wordt gebruikt om bestanden te creëren en informatie naar bestanden te schrijven.

2

ifstream

Dit datatype vertegenwoordigt de input file stream en wordt gebruikt om informatie van bestanden te lezen.

3

fstream

Dit datatype vertegenwoordigt de file stream in het algemeen, en heeft de mogelijkheden van zowel ofstream als ifstream, wat betekent dat het bestanden kan creëren, informatie naar bestanden kan schrijven, en informatie van bestanden kan lezen.

Om bestandsverwerking in C++ uit te voeren, moeten header files <iostream> en <fstream> in uw C++ bronbestand opgenomen worden.

Een Bestand Openen

Een bestand moet geopend worden voordat u ervan kunt lezen of ernaartoe kunt schrijven. Ofwel ofstream of fstream object kan gebruikt worden om een bestand te openen voor schrijven. En ifstream object wordt gebruikt om een bestand te openen alleen voor lezen.

Hier is de standaardsyntax voor de open() functie, die een lid is van fstream, ifstream, en ofstream objecten.

 void open(const char *filename, ios::openmode mode); 

Hier specificeert het eerste argument de naam en locatie van het te openen bestand en het tweede argument van de open() lidfunctie definieert de modus waarin het bestand geopend moet worden.

Nr. Mode Flag & Beschrijving
1

ios::app

Append modus. Alle output naar dat bestand wordt aan het einde toegevoegd.

2

ios::ate

Open een bestand voor output en verplaats de read/write controle naar het einde van het bestand.

3

ios::in

Open een bestand voor lezen.

4

ios::out

Open een bestand voor schrijven.

5

ios::trunc

Als het bestand al bestaat, zal de inhoud getruncateerd worden vóór het openen van het bestand.

U kunt twee of meer van deze waarden combineren door ze met OR te combineren. Bijvoorbeeld, als u een bestand in schrijfmodus wilt openen en het wilt truncaten voor het geval dat het al bestaat, zal de syntax als volgt zijn:

 ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc ); 

Op een vergelijkbare manier kunt u een bestand openen voor lezen en schrijven als volgt:

 fstream afile;
afile.open("file.dat", ios::out | ios::in ); 

Een Bestand Sluiten

Wanneer een C++ programma terminaat, fluushed het automatisch alle streams, geeft alle toegewezen geheugen vrij en sluit alle geopende bestanden. Maar het is altijd een goede praktijk dat een programmeur alle geopende bestanden sluit vóór programma terminatie.

Hier is de standaardsyntax voor de close() functie, die een lid is van fstream, ifstream, en ofstream objecten.

 void close(); 

Naar een Bestand Schrijven

Tijdens C++ programmeren, schrijft u informatie naar een bestand vanuit uw programma met behulp van de stream insertion operator (<<) net zoals u die operator gebruikt om informatie naar het scherm te outputten. Het enige verschil is dat u een ofstream of fstream object gebruikt in plaats van het cout object.

Van een Bestand Lezen

U leest informatie van een bestand in uw programma met behulp van de stream extraction operator (>>) net zoals u die operator gebruikt om informatie van het toetsenbord te inputten. Het enige verschil is dat u een ifstream of fstream object gebruikt in plaats van het cin object.

Lees en Schrijf Voorbeeld

Hier volgt het C++ programma dat een bestand opent in lees- en schrijfmodus. Na het schrijven van informatie ingevoerd door de gebruiker naar een bestand genaamd afile.dat, leest het programma informatie van het bestand en output het op het scherm:

Live Demo
 #include <fstream>
#include <iostream>
using namespace std;
int main () {
  char data[100];
  // open een bestand in schrijfmodus.
  ofstream outfile;
  outfile.open("afile.dat");
  cout << "Writing to the file" << endl;
  cout << "Enter your name: ";
  cin.getline(data, 100);
  // schrijf ingevoerde data in het bestand.
  outfile << data << endl;
  cout << "Enter your age: ";
  cin >> data;
  cin.ignore();
  // weer schrijf ingevoerde data in het bestand.
  outfile << data << endl;
  // sluit het geopende bestand.
  outfile.close();
  // open een bestand in leesmodus.
  ifstream infile;
  infile.open("afile.dat");
  cout << "Reading from the file" << endl;
  infile >> data;
  // schrijf de data op het scherm.
  cout << data << endl;
  // lees de data weer van het bestand en toon het.
  infile >> data;
  cout << data << endl;
  // sluit het geopende bestand.
  infile.close();
  return 0;
} 

Wanneer de bovenstaande code gecompileerd en uitgevoerd wordt, produceert het de volgende voorbeelduitvoer en invoer:

 $./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9 

Bovenstaande voorbeelden maken gebruik van additionele functies van cin object, zoals getline() functie om de regel van buitenaf te lezen en ignore() functie om de extra karakters genegeerd te laten door de vorige read statement.

Bestandspositie Pointers (File Position Pointers)

Zowel istream als ostream bieden lidfuncties voor het herpositioneren van de bestandspositie pointer. Deze lidfuncties zijn seekg ("seek get") voor istream en seekp ("seek put") voor ostream.

Het argument voor seekg en seekp is normaal een long integer. Een tweede argument kan gespecificeerd worden om de zoekrichting aan te geven. De zoekrichting kan ios::beg (de standaard) zijn voor positionering relatief tot het begin van een stream, ios::cur voor positionering relatief tot de huidige positie in een stream of ios::end voor positionering relatief tot het einde van een stream.

De bestandspositie pointer is een integer waarde die de locatie in het bestand specificeert als een aantal bytes vanaf de startlocatie van het bestand. Enkele voorbeelden van het positioneren van de "get" bestandspositie pointer zijn:

 // positioneer op de n-de byte van fileObject (veronderstelt ios::beg)
fileObject.seekg( n );
// positioneer n bytes vooruit in fileObject
fileObject.seekg( n, ios::cur );
// positioneer n bytes terug vanaf einde van fileObject
fileObject.seekg( n, ios::end );
// positioneer aan einde van fileObject
fileObject.seekg( 0, ios::end ); 

C Taal

  1. Wat Is Een Schruif? Uw Complete Gids voor Het Essentiële Hout- en Metaalbewerkingsgereedschap
  2. C++ Structuren vs Classes: Een praktische gids voor embedded-ontwikkelaars
  3. C++ variabelen, literalen en constanten: een uitgebreide gids
  4. C++ klassen & objecten: praktische gids voor object-georiënteerd programmeren
  5. C++ Geheugenbeheer meesteren: Expert gebruik van new en delete
  6. C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
  7. C Bestandsbehandeling: I/O onder de knie krijgen met fopen, fprintf, fread en fseek
  8. C Header-bestanden begrijpen: Typen, gebruik en best practices
  9. Uitgebreide Gids voor Datum en Tijd in C++
  10. C++ Overloading Beheersen: Functies & Operators Uitgelegd
  11. Python-directory en bestandsbewerkingen beheersen