2018年03月18日
《その336》 ファイルストリーム(1)
入力用のファイルストリーム用クラス ifstream
前回《335》のプログラムでは、リダイレクトによって標準入出力ストリームの接続先を変更する方法で、ファイルの読み書きを行いました。
ファイルストリーム用のクラスを利用して、プログラム上からファイルの操作をするのが、今回のプログラムです。
次の3つのクラスが、プログラム上からファイル操作をする際に利用されます。
ヘッダ <fstream>
・fstream 入出力用
・ifstream 入力用
・ofstream 出力用
下記のプログラムではファイルからの読み込みを行うので、入力用の ifstream を使っています。
ifstream fis(file_name);
引数にファイル名を与えて ifstream型オブジェクト fis を作成しますが、このときにファイルがオープンされます。
次いで、入力ストリーム fis を通じて文字列を読み込み、tmp に格納して、それを画面に出力します。
読み込みが完了して読み込む文字が無くなると、読み込みに失敗して
!fis
が成立するのでループから抜け出します。
※ストリームクラスには、変換関数 operator void*() が定義されていますが、式 fits によりこの変換関数が暗黙裏に呼び出されます。
この関数の返却値は、ストリームが正常であれば空ポインタ以外のポインタを、ストリームが異常であれば空ポインタを、それぞれ返却します。
読み込む文字が無くなると、読み込みに失敗して異常状態となり、空ポインタが返されるので !fits が成立します。
以下は、プログラムです。
予め用意しておく test.txtファイルの中身は「これはテストです。」です。
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main() {
char file_name[20];
cout << "ファイル名 : ";
cin >> file_name;
// ifstream型の入力ストリームとして
// ファイルをオープン。
// 以後は、ストリーム fs を通じて
// ファイル操作を行います。
ifstream fis(file_name);
if (!fis)
cout << "ファイルをオープンできません。";
else {
cout << "------------\n";
cout << "file name:"
<< file_name << '\n';
for (;;) {
string tmp;
fis >> tmp;
if (!fis) break;
cout << "【ファイルの中身】\n\""
<<tmp << "\"";
}
cout << "\n------------";
}
cout << '\n';
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7447731
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック