C ++ ifstream for å lese filer

C ++ ifstream for å lese filer
IFstream står for inngangsfilstrøm. “Input” refererer til tegn fra en fil som går inn i løpsprogrammet. Det er også C ++ -perioden, avStream, som står for utgang-fil-stream. Imidlertid fokuserer denne artikkelen på ifstream. IFstream er en C ++ -klasse, for håndtering av byte -sekvens i datamaskinen, som er fra en fil på disken, og går inn i løpsprogrammet. IFstream er i biblioteket (header), fstream, som må inkluderes i kildekodeprogrammet.

Et C ++ -program for å bruke IFstream -klassen skal begynne som følger:

#inkludere
#inkludere
ved hjelp av navneområdet STD;

Den første linjen inkluderer overskriften som har definisjonen av IFstream -klassen. Den andre linjen inkluderer iostream -overskriften som har COUT -objektet for utskrift av utgang til terminalen (konsoll). Den tredje linjen er en uttalelse, og ikke et direktiv. Standard navneområdet er et hvilket som helst navn etterfulgt av "STD:;".

Denne artikkelen forklarer bruken av ifstream -klassen til Fstream -overskriften, for å håndtere inndata fra en fil på disk til et løpsprogram. Inngangen er tegn i rekkefølge som går til en buffer i minnet før du når programmet. Med andre ord, denne artikkelen forklarer hvordan du kan lese en tekstfil, fra disken, i C++.

Opprette et ifstream -objekt

For å lese innholdet i en fil på disken, må et IFstream -objekt bli instantiert fra IFstream -klassen. Konstruktørene som ofte brukes av angelsaksiske (inkludert vesteuropeiske) programmerere er:

Basic_IfStream ();
eksplisitt Basic_ifstream (const char* s, ios_base :: openMode -modus = ios_base :: in);
og
eksplisitt Basic_ifstream (const String & s, ios_base :: openMode -modus = ios_base :: in);

Prefikset, "Basic_" kan utelates for alle tre syntakser. Bruken av den første syntaksen her vil bli illustrert i neste avsnitt. I den andre syntaks er det første argumentet en streng bokstavelig eller en rekke tegn som slutter i '\ 0'. Denne strengen er en katalogsti og filnavn, e.g. “Dir1/txtfile.txt ”, forutsatt at programmet er i hjem/brukerkatalog. For den andre syntaksen er det første argumentet det samme som det første argumentet fra forrige syntaks, men det er en streng i strengklassen (header). I begge syntaksene skal det andre argumentet være "iOS_base :: in" hvor "in" betyr for lesing (input).

Illustrasjon

En konstruksjonserklæring for den andre syntaksen er som følger:

ifstream ifs = ifstream ("Dir1/txtfile.txt ", ios_base :: in);

Navnet på filen hvis innhold skal leses er, “txtfile.tekst". Etter denne uttalelsen “txtfile.TXT ”anses som åpent i løpsprogrammet. Når en fil åpnes, er en sekvens av påfølgende tegn som representerer filen i minnet for bufferkontroll.

Et konstruksjonskodesegment for den tredje syntaks er:

String str = "Dir1/txtfile.tekst";
ifstream ifs = ifstream (str, ios_base :: in);

I begge situasjoner er IFS IfStream -objektet til den åpnede filen. Med strengtypen, ikke glem å inkludere strengklassen (overskriften) inn i programmet som følger:

#inkludere

Åpne en fil

En fil sies å bli åpnet når en sekvens av påfølgende tegn i filen som representerer filen er i minnet for bufferkontroll. Den andre og tredje konstruksjonssyntaksen over åpner filen for lesing, men den første syntaksen gjør det ikke. Det vil si at andre og tredje syntaks gjør instantiering av IFstream -objektet og åpningen av filen også mens den første syntaksen bare gjør instantiering. Objektet IFS kan instantieres fra IFStream -klassen ved å bruke den første syntaksen med uttalelsen:

ifstream ifs;

I dette tilfellet er det opprettet et filobjekt hvis filen ennå er åpnet. For å åpne filen for lesing, må den åpne medlemsfunksjonen til IFstream -klassen brukes. De åpne () overbelastede metodene som vanligvis brukes av angelsaksiske (inkludert vesteuropeiske) programmerere er:

void Open (const char* s, ios_base :: openMode mode = ios_base :: in);
void Open (Const String & S, IOS_Base :: OpenMode Mode = IOS_Base :: in);

Merk at konstruksjonserklæringen "ifstream ifs;" nevnes ikke noen fil på disken. Og slik har de første og andre argumentene for disse åpne () medlemsfunksjonene de samme betydningen som for henholdsvis andre og tredje konstruksjonssyntaks over.

Illustrasjon

Bruken av den første åpne () medlemsfunksjonen her (i dette avsnittet), kan illustreres som følger:

ifstream ifs;
const char* str = "dir1/txtfile.tekst";
ifs.åpen (str, ios_base :: in);

Bruken av den andre åpne () medlemsfunksjonen her (i dette avsnittet) kan illustreres som følger:

ifstream ifs;
String str = "Dir1/txtfile.tekst";
ifs.åpen (str, ios_base :: in);

Forskjellen i de to kodesegmentene er måtene strengen for banen og filnavnet er konstruert.

Ble filen åpnet?

En fil sies å være åpnet, når en sekvens av påfølgende tegn i filen som representerer filen er i minnet for bufferkontroll. Hva om banen og/eller filnavnet var feil? Hva om filen ikke kunne åpnes fordi disken var dårlig og sektorene ikke kunne leses? Det anbefales alltid å sjekke om filen ble åpnet ved hjelp av syntaks:

bool is_open () const;

is_open () er medlemsfunksjon i IFstream -klassen. Den returnerer sant, hvis filen ble åpnet med suksess, og falsk ellers. Følgende kodesegment illustrerer bruken av denne medlemsfunksjonen:

ifstream ifs;
const char* str = "dir1/txtfile.tekst";
ifs.åpen (str, ios_base :: in);
hvis (ifs.is_open () == true)
cout << "File is opened." << endl;
ellers
cout << "File could not be open!" << endl;

Utgangen skal være:

Filen åpnes.

Lukke en fil

En fil skal lukkes etter at den er åpnet. Den avsluttende handlingen stopper bufferen i minnet, og frigjør minneplass for andre aktiviteter. Det bryter også grasiøst forbindelsen den gjorde med filen på disken. IFstream har medlemsfunksjonen Close () for å lukke en åpnet fil. Syntaksen er:

tomrom nær ();

Følgende kodesegment illustrerer bruken:

ifstream ifs = ifstream ("Dir1/txtfile.txt ", ios_base :: in);
hvis (ifs.is_open () == true)
/* Gjør noe med den åpne filen her. */
ifs.Lukk();
cout << "Opened File has been closed." << endl;

ellers
cout << "File could not be open!" << endl;

Utgangen er:

Åpnet fil er lukket.

Filen skal brukes når programmereren er sikker på at den er åpnet, og deretter lukket etter det.

Leser tegn én for en

IFstream har en medlemsfunksjon hvis syntaks er:

Basic_istream& get (char_type & c);

Når det får neste karakter, setter den den i variabelen C og returnerer IfStreams objekt arvet fra Basic_istream. Den interne pekeren til IFstream peker deretter på neste karakter for neste lesing. Når slutten av filen er nådd, blir objektet som returneres konvertert til falsk.

Følgende kodesegment leser alle tegnene i filen en-for-en og sender hver til terminalen (konsollen):

char c;
mens (ifs.få (c))
cout << c;

C må erklæres først. C er argumentet om Get (), som er en medlemsfunksjon av IFstream -objektet. Den eneste enkle uttalelsen (cout << c;) of the while compound statement sends a copy of the character to the output.

I stedet for å sende tegnene til utdataene, kan de sendes til et strengobjekt, og danner en lang streng som følger:

char c;
streng str;
mens (ifs.få (c))
str.push_back (c);

I dette tilfellet må strengoverskriften (biblioteket) inkluderes i programmet.

Følgende program leser alt innholdet i en fil og viser det:

#inkludere
#inkludere
#inkludere
ved hjelp av navneområdet STD;
int main ()

ifstream ifs = ifstream ("Dir1/txtfile.txt ", ios_base :: in);
hvis (ifs.is_open () == true)
char c;
streng str;
mens (ifs.få (c))
str.push_back (c);
cout << str<< endl;
ifs.Lukk();
cout << "Opened File has been closed." << endl;

ellers
cout << "File could not be open!" << endl;
retur 0;

Konklusjon

IfStream -klassen til Fstream -overskriften håndterer inndata fra en fil fra disk til et løpsprogram. For å lage et IFstream -objekt, bruk noen av syntaksene:

Basic_IfStream ();
eksplisitt Basic_ifstream (const char* s, ios_base :: openMode -modus = ios_base :: in);
eksplisitt Basic_ifstream (const String & s, ios_base :: openMode -modus = ios_base :: in);

Hvis den første syntaks brukes, må objektet fortsatt åpnes, med noen av følgende medlemsfunksjonssyntaks:

void Open (const char* s, ios_base :: openMode mode = ios_base :: in);
void Open (Const String & S, IOS_Base :: OpenMode Mode = IOS_Base :: in);

For å vite om en fil blir åpnet med hell, bruk medlem av medlemsfunksjonen:

bool is_open () const;

Ifstream -objektet må lukkes etter bruk.

For å lese karakterene en-for-en, bruk i en stug-sløyfe, medlemsfunksjonssyntaks:

Basic_istream& get (char_type & c);