テキスト ストリームとバイナリ ストリーム
更新 : 2007 年 11 月
テキスト ストリームは、1 行以上で構成されるテキストであり、テキストを読み込むことができるようにテキスト指向のディスプレイに書き込まれます。テキスト ストリームから読み取る場合、プログラムは行末の NL (改行) を読み込みます。テキスト ストリームに書き込む場合、プログラムは NL を書き込んで行末を示します。ターゲット環境間でファイル内のテキストを表現する規約が異なる場合は、ライブラリ関数を使用するとプログラムとテキスト ストリームの間でやり取りされる文字の数と表現形態を統一できます。
このため、テキスト ストリーム内の位置は制限されます。現在のファイル位置インジケータを取得するには、fgetpos または ftell を呼び出します。テキスト ストリームは、fsetpos または fseek を呼び出して、この方法で取得した位置に指定するか、ストリームの始めまたは終わりに指定します。ほかの位置への変更は、サポートされていない可能性があります。
プログラムの移植性を高めるには、以下のものを書き込まないようにします。
空のファイル。
行末の空白文字。
ファイルの終端の NL を省略した未完の行。
印字可能な文字、NL、HT (水平タブ) 以外の文字。
以上の規則に従えば、テキスト ストリームから読み取られるバイト文字またはマルチバイト文字のシーケンスは、ファイルの作成時にテキスト ストリームに書き込まれた文字のシーケンスと一致します。以上の規則に従わずに、ファイルを作成して空のまま閉じた場合、そのファイルはライブラリ関数によって削除されます。また、以上の規則に違反する文字をファイルに書き込んだ場合、その文字は変更または削除されます。
バイナリ ストリームは、1 バイト以上の任意の情報で構成されます。任意のオブジェクトに格納されている値は、バイト指向のバイナリ ストリームに書き込むことができ、値を書き込んだときオブジェクトに格納されたとおりに読み取ることができます。プログラムとバイナリ ストリームとの間でやり取りされるバイトは、ライブラリ関数によって変更されません。ただし、バイナリ ストリームを使用して書き込むファイルには任意の数の null バイトを追加できます。プログラムは、あらゆるバイナリ ストリームの終端に追加される null バイトを処理できるものとします。
したがって、バイナリ ストリーム内の位置は、ストリームの終端の位置を除いて、完全に定義できます。現在のファイル位置インジケータを取得して変更する方法は、テキスト ストリームの場合と同じです。さらに、ftell および fseek によって使用されるオフセットは、ストリームの先頭 (0 バイト) からのバイトをカウントするため、各オフセットに対する整数の算術演算による結果を予測できます。
バイト ストリームは、ファイルをバイトのシーケンスとして扱います。プログラム内のストリームは、以上に説明した差異を除いて、バイトの同じシーケンスのように表示されます。