Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eingabestream-Memberfunktionen werden für Datenträgereingaben verwendet.
open
Wenn Sie einen Eingabedateidatenstrom (ifstream
) verwenden, müssen Sie diesen Datenstrom einer bestimmten Datenträgerdatei zuordnen. Sie können dies im Konstruktor tun, oder Sie können die open
Funktion verwenden. In beiden Fällen sind die Argumente gleich.
Sie geben im Allgemeinen ein ios_base::openmode
Flag an, wenn Sie die datei öffnen, die einem Eingabedatenstrom zugeordnet ist (der Standardmodus ist ios::in
). Eine Liste der openmode
Flags finden Sie unter ios_base::openmode
. Die Flags können mit dem bitweisen Operator "oder" (|
) kombiniert werden.
Verwenden Sie zum Lesen einer Datei zuerst die fail
Memberfunktion, um zu bestimmen, ob sie vorhanden ist:
istream ifile("FILENAME");
if (ifile.fail())
// The file does not exist ...
get
Die unformatierte get
Memberfunktion funktioniert wie der >>
Operator mit zwei Ausnahmen. Zunächst enthält die get
Funktion Leerzeichen, während der Extraktor Leerzeichen ausschließt, wenn das skipws
Flag festgelegt ist (Standard). Zweitens ist die get
Funktion weniger wahrscheinlich, dass ein gebundener Ausgabedatenstrom (cout
z. B.) geleert wird.
Eine Variation der get
Funktion gibt eine Pufferadresse und die maximale Anzahl der zu lesenden Zeichen an. Dies hilft dabei, die Anzahl der Zeichen einzuschränken, die zu einer bestimmten Variable gesendet werden, wie dieses Beispiel zeigt:
// ioo_get_function.cpp
// compile with: /EHsc
// Type up to 24 characters and a terminating character.
// Any remaining characters can be extracted later.
#include <iostream>
using namespace std;
int main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << line << endl;
}
Eingabe
1234
Beispielausgabe
1234
getline
Die getline
Memberfunktion ähnelt der get
Funktion. Beide Funktionen ermöglichen ein drittes Argument, das abschließende Zeichen für die Eingabe angibt. Der Standardwert ist das Zeilenumbruchzeichen. Beide Funktionen reservieren ein Zeichen für das benötigte abschließende Zeichen. get
Belässt jedoch das Endzeichen im Datenstrom und getline
entfernt das endende Zeichen.
Im folgenden Beispiel wird ein abschließendes Zeichen für den Eingabestream angegeben:
// getline_func.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
char line[100];
cout << " Type a line terminated by 't'" << endl;
cin.getline( line, 100, 't' );
cout << line;
}
Eingabe
test
read
Die read
Memberfunktion liest Bytes aus einer Datei in einen angegebenen Speicherbereich. Das Längenargument bestimmt die Anzahl gelesener Bytes. Wenn Sie dieses Argument nicht einschließen, stoppt das Lesen, wenn das physische Ende der Datei erreicht wird, oder im Fall einer Textmodusdatei, wenn ein eingebettetes EOF
Zeichen gelesen wird.
Dieses Beispiel liest einen binären Datensatz aus einer Lohnabrechnungsdatei in eine Struktur:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
struct
{
double salary;
char name[23];
} employee;
ifstream is( "payroll" );
if( is ) { // ios::operator void*()
is.read( (char *) &employee, sizeof( employee ) );
cout << employee.name << ' ' << employee.salary << endl;
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
Das Programm geht davon aus, dass die Datensätze genau so formatiert sind, wie sie durch die Struktur angegeben sind, ohne die Wagenrücklauf- oder Zeilenvorschubzeichen zu beenden.
seekg
und tellg
Eingabedatei-Streams behalten einen internen Zeiger auf der Position in der Datei, in der Daten als Nächstes gelesen werden. Legen Sie diesen Zeiger mit der seekg
-Funktion fest, wie hier gezeigt:
#include <iostream>
#include <fstream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
tfile.seekg( 8 ); // Seek 8 bytes in (past salary)
while ( tfile.good() ) { // EOF or failure stops the reading
tfile.get( ch );
if( !ch ) break; // quit on null
cout << ch;
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
seekg
Um datensatzorientierte Datenverwaltungssysteme zu implementieren, multiplizieren Sie die Datensatzgröße mit fester Länge mit der Datensatznummer, um die Byteposition relativ zum Ende der Datei abzurufen, und verwenden Sie dann das get
Objekt, um den Datensatz zu lesen.
Die tellg
-Memberfunktion gibt die aktuelle Dateiposition zum Lesen zurück. Dieser Wert ist vom Typ streampos
, ein typedef
definiert in <iostream>
. Das folgende Beispiel liest eine Datei und zeigt Meldungen an, die die Positionen der Leerzeichen zeigen.
#include <fstream>
#include <iostream>
using namespace std;
int main( )
{
char ch;
ifstream tfile( "payroll" );
if( tfile ) {
while ( tfile.good( ) ) {
streampos here = tfile.tellg();
tfile.get( ch );
if ( ch == ' ' )
cout << "\nPosition " << here << " is a space";
}
}
else {
cout << "ERROR: Cannot open file 'payroll'." << endl;
}
}
close
Die close
Memberfunktion schließt die Datenträgerdatei, die einem Eingabedateidatenstrom zugeordnet ist, und gibt das Betriebssystemdateihandle frei. Der ifstream
Destruktor schließt die Datei für Sie, aber Sie können die close
Funktion verwenden, wenn Sie eine andere Datei für dasselbe Streamobjekt öffnen müssen.