入力ストリームのメンバー関数
入力ストリームのメンバー関数はディスクの入力に使用されます。このメンバー関数は以下が含まれています :
入力ストリームの開いた関数
Get 関数
getline の関数
入力関数
seekg と tellg の関数
入力ストリームの終了関数
入力ストリームの開いた関数
入力ファイル ストリーム ifstream () を使用すると特定のディスク ファイルとそのストリームを関連付ける必要があります。コンストラクターでこれを行うことも 開く の関数を使用します。いずれの場合も引数は同じです。
入力ストリームに関連付けられたファイルを開く場合に ios_base:: openmode のフラグを指定します (既定のモードは ios:: 入力 です。open_mode フラグの一覧については 開いた関数 を参照してください。フラグはビットごとにまとめることができます (または | 演算子)。
ファイルを読み取るには最初にあるかどうかを判断するに 失敗 のメンバー関数の使用 :
istream ifile( "FILENAME" );
if ( ifile.fail() )
// The file does not exist ...
Get 関数
取得 の書式指定されていないメンバー関数は2 種類の例外を除き >> の演算子のように動作します。まず 取得 の関数は skipws フラグが設定 (既定) の場合抽出器が空白を除く一方空白文字が含まれています。第 2 に 取得 の関数は結ばれた出力ストリーム cout フラッシュします (ほとんどありません。たとえば)。
取得 の関数のバリエーションが参照する文字のバッファーのアドレスと最大数を指定します。これはこの例に示すように特定の変数に送信される文字数を制限する場合に便利です :
// 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;
}
入力
1234
出力例
1234
getline の関数
getline のメンバー関数は 取得 の関数に似ています。関数は両方の入力の終了文字を指定する 3 番目の引数ができます。既定値は改行文字です。関数は共に必要な終了文字で 1 文字を予約します。ただし 取得 はストリームに終了文字を開きgetline は終了文字を削除します。
次の例では入力ストリームの終了文字を指定するものです :
// 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;
}
入力
test
入力関数
読み取り のメンバー関数はファイルから指定されたメモリ領域にバイトを読み込みます。長さの引数は読み取ったバイト数を指定します。この引数がない場合は読み取ることは EOF の埋め込み文字が読み込まれたときに物理的な EOF が見つかりました。テキスト モードがファイルの場合は達すると停止します。
この例では従業員のファイルからバイナリ データを読み込みます :
#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;
}
}
プログラムではデータ レコードに復帰またはライン フィード文字の終了せずに構造体で指定されたとおりに書式設定されていることを前提とします。
seekg と tellg の関数
入力ファイル ストリームにデータは次に読み取られるファイルの場所内部ポインターを保持します。次に示すように seekg の関数でこのポインターを設定しました :
#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 指向のデータ管理システムを実行するにはファイルの末尾に対するバイトの位置を取得したり固定長のレコード サイズを増加しレコード数にレコードを読み取るために 取得 のオブジェクトを使用します。
tellg のメンバー関数は読み取り用のファイルの現在の位置を返します。定義された型 streampos この値はtypedef です <iostream>。次の例ではファイルを読み取り空間の位置を示すメッセージが表示されます。
#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;
}
}
入力ストリームの終了関数
閉じる のメンバー関数は入力ファイル ストリームに関連付けられているディスク ファイルを閉じオペレーティング システムのファイル ハンドルを解放します。ifstream のデストラクターを使用するとファイルを閉じます同じストリーム オブジェクトに対して別ファイルを開く必要がある場合 閉じる の関数を使用します。