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

C++-bestanden en -streams

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

In deze zelfstudie leert u lezen en schrijven vanuit een bestand. Dit vereist een andere standaard C++-bibliotheek genaamd fstream , die drie nieuwe gegevenstypen definieert −

Zr.Nee Gegevenstype en beschrijving
1

vanstroom

Dit gegevenstype vertegenwoordigt de uitvoerbestandsstroom en wordt gebruikt om bestanden te maken en informatie naar bestanden te schrijven.

2

ifstream

Dit gegevenstype vertegenwoordigt de invoerbestandsstroom en wordt gebruikt om informatie uit bestanden te lezen.

3

fstream

Dit gegevenstype vertegenwoordigt de bestandsstream in het algemeen en heeft de mogelijkheden van zowel ofstream als ifstream, wat betekent dat het bestanden kan maken, informatie naar bestanden kan schrijven en informatie uit bestanden kan lezen.

Om bestandsverwerking in C++ uit te voeren, moeten headerbestanden en worden opgenomen in uw C++-bronbestand.

Een bestand openen

Een bestand moet worden geopend voordat u ervan kunt lezen of ernaar kunt schrijven. Ofwel vanstroom of fstream object kan worden gebruikt om een ​​bestand te openen om te schrijven. En het ifstream-object wordt alleen gebruikt om een ​​bestand te openen voor leesdoeleinden.

Hieronder volgt de standaardsyntaxis voor de functie open(), die 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 moet worden geopend.

Zr.Nee Modusmarkering en beschrijving
1

ios::app

Modus toevoegen. Alle uitvoer naar dat bestand moet aan het einde worden toegevoegd.

2

ios::ate

Open een bestand voor uitvoer en verplaats de lees-/schrijfknop naar het einde van het bestand.

3

ios::in

Open een bestand om te lezen.

4

ios::out

Open een bestand om te schrijven.

5

ios::trunc

Als het bestand al bestaat, wordt de inhoud ervan afgekapt voordat het bestand wordt geopend.

U kunt twee of meer van deze waarden combineren door OF ze samen. Als u bijvoorbeeld een bestand in de schrijfmodus wilt openen en het wilt afkappen als het al bestaat, volgt de syntaxis −

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

Op dezelfde manier kunt u als volgt een bestand openen voor lees- en schrijfdoeleinden −

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

Een bestand sluiten

Wanneer een C++-programma wordt beëindigd, worden automatisch alle streams leeggemaakt, wordt al het toegewezen geheugen vrijgegeven en worden alle geopende bestanden gesloten. Maar het is altijd een goede gewoonte dat een programmeur alle geopende bestanden sluit voordat het programma wordt beëindigd.

Hieronder volgt de standaardsyntaxis voor de functie close(), die lid is van fstream-, ifstream- en ofstream-objecten.

void close();

Schrijven naar een bestand

Terwijl u C++ programmeert, schrijft u informatie naar een bestand vanuit uw programma met behulp van de stream-invoegoperator (<<), net zoals u die operator gebruikt om informatie naar het scherm te sturen. Het enige verschil is dat je een ofstream . gebruikt of fstream object in plaats van de cout voorwerp.

Lezen uit een bestand

U leest informatie uit een bestand in uw programma met behulp van de streamextractie-operator (>>) net zoals u die operator gebruikt om informatie in te voeren vanaf het toetsenbord. Het enige verschil is dat je een ifstream . gebruikt of fstream object in plaats van de cin voorwerp.

Voorbeeld lezen en schrijven

Hieronder volgt het C++-programma dat een bestand opent in lees- en schrijfmodus. Na het schrijven van informatie die door de gebruiker is ingevoerd naar een bestand met de naam afile.dat, leest het programma informatie uit het bestand en voert het uit op het scherm −

Live demo
#include <fstream>
#include <iostream>
using namespace std;
 
int main () {
   char data[100];

   // open a file in write mode.
   ofstream outfile;
   outfile.open("afile.dat");

   cout << "Writing to the file" << endl;
   cout << "Enter your name: "; 
   cin.getline(data, 100);

   // write inputted data into the file.
   outfile << data << endl;

   cout << "Enter your age: "; 
   cin >> data;
   cin.ignore();
   
   // again write inputted data into the file.
   outfile << data << endl;

   // close the opened file.
   outfile.close();

   // open a file in read mode.
   ifstream infile; 
   infile.open("afile.dat"); 
 
   cout << "Reading from the file" << endl; 
   infile >> data; 

   // write the data at the screen.
   cout << data << endl;
   
   // again read the data from the file and display it.
   infile >> data; 
   cout << data << endl; 

   // close the opened file.
   infile.close();

   return 0;
}

Wanneer de bovenstaande code is gecompileerd en uitgevoerd, produceert deze de volgende voorbeeldinvoer en -uitvoer −

$./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 extra functies van het cin-object, zoals de functie getline() om de regel van buitenaf te lezen en de functie negeer() om de extra tekens te negeren die zijn achtergelaten door de vorige leesopdracht.

Bestandspositiewijzers

Beide istream en ostream bieden lidfuncties voor het herpositioneren van de bestandspositieaanwijzer. Deze ledenfuncties zijn seekg ("seek get") voor istream en seekp ("seek put") voor ostream.

Het argument voor seekg en seekp is normaal gesproken een lang geheel getal. Er kan een tweede argument worden opgegeven om de zoekrichting aan te geven. De zoekrichting kan ios::beg . zijn (de standaardinstelling) voor positionering ten opzichte van het begin van een stream, ios::cur voor positionering ten opzichte van de huidige positie in een stream of ios::end voor positionering ten opzichte van het einde van een stream.

De bestandspositieaanwijzer is een geheel getal dat de locatie in het bestand aangeeft als een aantal bytes vanaf de startlocatie van het bestand. Enkele voorbeelden van het positioneren van de "get" bestandspositieaanwijzer zijn −

// position to the nth byte of fileObject (assumes ios::beg)
fileObject.seekg( n );

// position n bytes forward in fileObject
fileObject.seekg( n, ios::cur );

// position n bytes back from end of fileObject
fileObject.seekg( n, ios::end );

// position at end of fileObject
fileObject.seekg( 0, ios::end );

C Taal

  1. C++ variabelen, literalen en constanten
  2. C++ klassen en objecten
  3. C++ Geheugenbeheer:nieuw en verwijderen
  4. C++ vriend Functie en vriend Klassen
  5. C Bestandsverwerking
  6. Python-directory en bestandsbeheer
  7. Structuren en klassen in C++
  8. C - Koptekstbestanden
  9. C++ Datum en tijd
  10. C++ overbelasting (operator en functie)
  11. Wat is een Mill-bestand?