JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.2: C++ ユーザーズガイド
search filter icon
search icon

ドキュメントの情報

はじめに

パート I C++ コンパイラ

1.  C++ コンパイラの紹介

2.  C++ コンパイラの使用方法

3.  C++ コンパイラオプションの使い方

パート II C++ プログラムの作成

4.  言語拡張

5.  プログラムの編成

6.  テンプレートの作成と使用

7.  テンプレートのコンパイル

8.  例外処理

9.  プログラムパフォーマンスの改善

10.  マルチスレッドプログラムの構築

パート III ライブラリ

11.  ライブラリの使用

12.  C++ 標準ライブラリの使用

13.  従来の iostream ライブラリの使用

13.1 定義済みの iostream

13.2 iostream 操作の基本構造

13.3 従来の iostream ライブラリの使用

13.3.1 iostream を使用した出力

13.3.1.1 ユーザー定義の挿入演算子

13.3.1.2 出力エラーの処理

13.3.1.3 出力のフラッシュ

13.3.1.4 バイナリ出力

13.3.2 iostream を使用した入力

13.3.3 ユーザー定義の抽出演算子

13.3.4 char* の抽出子

13.3.5 1 文字の読み込み

13.3.6 バイナリ入力

13.3.7 入力データの先読み

13.3.8 空白の抽出

13.3.9 入力エラーの処理

13.3.10 iostreamstdio の併用

13.4 iostream の作成

13.4.1 クラス fstream を使用したファイル操作

13.4.1.1 オープンモード

13.4.1.2 ファイルを指定しない fstream の宣言

13.4.1.3 ファイルのオープンとクローズ

13.4.1.4 ファイル記述子を使用したファイルのオープン

13.4.1.5 ファイル内の位置の再設定

13.5 iostream の代入

13.6 フォーマットの制御

13.7 マニピュレータ

13.7.1 引数なしのマニピュレータの使用法

13.7.2 引数付きのマニピュレータの使用法

13.8 ストリーム: 配列用の iostream

13.9 stdiobuf: 標準入出力ファイル用の iostream

13.10 streambuf

13.10.1 streambuf の機能

13.10.1.1 ポインタの位置

13.10.2 streambuf の使用

13.11 iostream に関するマニュアルページ

13.12 iostream の用語

14.  複素数演算ライブラリの使用

15.  ライブラリの構築

パート IV 付録

A.  C++ コンパイラオプション

B.  プラグマ

用語集

索引

13.4 iostream の作成

定義済みの iostream 以外のストリームを読み込む、あるいは書き込む場合は、ユーザーが自分で iostream を生成する必要があります。これは一般には、iostream ライブラリで定義されている型のオブジェクトを生成することになります。ここでは、使用できるさまざまな型について説明します。

13.4.1 クラス fstream を使用したファイル操作

ファイル操作は標準入出力の操作に似ています。ifstreamofstrea mfstream の 3 つのクラスはそれぞれ、istreamostreamiostream の各クラスから派生しています。この 3 つのクラスは派生クラスなので、挿入演算と抽出演算、および、そのほかのメンバー関数を継承しており、ファイル使用のためのメンバーとコンストラクタも持っています。

fstream のいずれかを使用するときは、fstream.h をインクルードします。入力だけ行うときは ifstream、出力だけ行うときは ofstream、入出力を行うときは fstream を使用します。コンストラクタへの引数としてはファイル名を渡します。

thisFile というファイルから thatFile というファイルへのファイルコピーを行うときは、次のコーディング例のようになります。

ifstream fromFile("thisFile");
if     (!fromFile)
    error("unable to open ’thisFile’ for input");
ofstream toFile ("thatFile");
if     (!toFile)
    error("unable to open ’thatFile’ for output");
char c;
while (toFile && fromFile.get(c)) toFile.put(c);

このコードでは次のことを実行します。

13.4.1.1 オープンモード

オープンモードは、列挙型 open_mode の各ビットの or で構築されます。open_mode は、ios クラスの公開部であり、次のように定義されています。

enum open_mode {binary=0, in=1, out=2, ate=4, app=8, trunc=0x10,
     nocreate=0x20, noreplace=0x40};

注 - UNIX では binary フラグは必要ありませんが、binary フラグを必要とするシステムとの互換性を保つために提供されています。移植可能なコードにするためには、バイナリファイルをオープンするときに binary フラグを使用する必要があります。


入出力両用のファイルをオープンできます。たとえば次のコードでは、someName という入出力ファイルをオープンして、fstream 変数 inoutFile に結合します。

fstream inoutFile("someName", ios::in|ios::out);
13.4.1.2 ファイルを指定しない fstream の宣言

ファイルを指定せずに fstream の宣言だけを行い、のちにファイルをオープンすることもできます。次の例では出力用の ofstream toFile を作成します。

ofstream toFile;
toFile.open(argv[1], ios::out);
13.4.1.3 ファイルのオープンとクローズ

fstream をいったんクローズし、また別のファイルでオープンすることができます。たとえば、コマンド行で与えられるファイルリストを処理するには次のようにします。

ifstream infile;
for (char** f = &argv[1]; *f; ++f) {
   infile.open(*f, ios::in);
   ...;
   infile.close();
}
13.4.1.4 ファイル記述子を使用したファイルのオープン

標準出力は整数 1 などのようにファイル記述子がわかっている場合は、次のようにファイルをオープンできます。

ofstream outfile;
outfile.attach(1);

fstream コンストラクタの 1 つにファイル名を指定してファイルをオープンしたり、open 関数を使用してオープンしたファイルは、fstream が破壊された時点 (delete するか、スコープ外に出る時点) で自動的にクローズされます。attachfstream に結合したファイルは、自動的にはクローズされません。

13.4.1.5 ファイル内の位置の再設定

ファイル内の読み込み位置と書き込み位置を変更することができます。そのためには次のようなツールがあります。

enum seek_dir {beg=0, cur=1, end=2};

fstream aFile の位置再設定の例を次に示します。

streampos original = aFile.tellp();     //save current position
aFile.seekp(0, ios::end); //reposition to end of file
aFile << x;               //write a value to file
aFile.seekp(original);    //return to original position

seekg (seekp) は、1 つまたは 2 つの引数を受け取ります。引数を 2 つ受け取るときは、第 1 引数は、第 2 引数で指定した seek_dir 値が示す位置からの相対位置となります。次に例を示します。

aFile.seekp(-10, ios::end);

この例では、ファイルの最後から 10 バイトの位置に設定されます。

aFile.seekp(10, ios::cur);

一方、次の例では現在位置から 10 バイト進められます。


注 - テキストストリーム上での任意位置へのシーク動作はマシン依存になります。ただし、以前に保存した streampos の値にいつでも戻ることができます。