C++ ファイルとストリーム
これまで、iostream を使用してきました cin を提供する標準ライブラリ そしてカウト それぞれ、標準入力からの読み取りと標準出力への書き込みのメソッド。
このチュートリアルでは、ファイルの読み取りと書き込みの方法を説明します。これには、fstream という別の標準 C++ ライブラリが必要です 、3 つの新しいデータ型を定義します −
Sr.No | データの種類と説明 |
---|---|
1 | ストリーム このデータ型は出力ファイル ストリームを表し、ファイルの作成とファイルへの情報の書き込みに使用されます。 |
2 | ifstream このデータ型は入力ファイル ストリームを表し、ファイルから情報を読み取るために使用されます。 |
3 | ストリーム このデータ型は一般にファイル ストリームを表し、ofstream と ifstream の両方の機能を備えています。つまり、ファイルの作成、ファイルへの情報の書き込み、およびファイルからの情報の読み取りが可能です。 |
C++ でファイル処理を実行するには、ヘッダー ファイル
ファイルを開く
ファイルの読み取りまたは書き込みを行う前に、ファイルを開く必要があります。 ストリームのいずれか または fstream オブジェクトを使用して、書き込み用にファイルを開くことができます。また、ifstream オブジェクトを使用して、読み取り専用のファイルを開きます。
以下は、fstream、ifstream、および ofstream オブジェクトのメンバーである open() 関数の標準構文です。
void open(const char *filename, ios::openmode mode);
ここで、最初の引数は開くファイルの名前と場所を指定し、open() の 2 番目の引数は メンバー関数は、ファイルを開くモードを定義します。
Sr.No | モード フラグと説明 |
---|---|
1 | iOS::アプリ 追加モード。そのファイルへのすべての出力が最後に追加されます。 |
2 | ios::ate 出力用にファイルを開き、読み取り/書き込み制御をファイルの末尾に移動します。 |
3 | ios::in 読み取り用にファイルを開きます。 |
4 | ios::out 書き込み用にファイルを開きます。 |
5 | ios::trunc ファイルが既に存在する場合、その内容はファイルを開く前に切り捨てられます。 |
これらの値の 2 つ以上を OR で組み合わせることができます それらを一緒にします。たとえば、ファイルを書き込みモードで開き、既に存在する場合に切り捨てたい場合、次の構文になります-
ofstream outfile; outfile.open("file.dat", ios::out | ios::trunc );
同様の方法で、次のように読み書き目的でファイルを開くことができます −
fstream afile; afile.open("file.dat", ios::out | ios::in );
ファイルを閉じる
C++ プログラムが終了すると、すべてのストリームが自動的にフラッシュされ、割り当てられたすべてのメモリが解放され、開いているすべてのファイルが閉じられます。しかし、プログラマーがプログラムを終了する前に開いているすべてのファイルを閉じることは常に良い習慣です。
以下は、fstream、ifstream、および ofstream オブジェクトのメンバーである close() 関数の標準構文です。
void close();
ファイルへの書き込み
C++ プログラミングの実行中は、ストリーム挿入演算子 (<<) を使用して情報を画面に出力するのと同じように、プログラムからファイルに情報を書き込みます。唯一の違いは、ofstream を使用することです。 または fstream cout の代わりにオブジェクト オブジェクト。
ファイルからの読み取り
ストリーム抽出演算子 (>>) を使用して、キーボードから情報を入力するのと同じように、ファイルからプログラムに情報を読み取ります。唯一の違いは、ifstream を使用することです または fstream cin の代わりにオブジェクト オブジェクト。
読み書きの例
以下は、読み書きモードでファイルを開く C++ プログラムです。ユーザーが入力した情報を afile.dat という名前のファイルに書き込んだ後、プログラムはファイルから情報を読み取り、画面に出力します −
ライブデモ#include <fstream> #include <iostream> using namespace std; int main () { char data[100]; // open a file in write mode. ofstream outfile; outfile.open("afile.dat"); cout << "Writing to the file" << endl; cout << "Enter your name: "; cin.getline(data, 100); // write inputted data into the file. outfile << data << endl; cout << "Enter your age: "; cin >> data; cin.ignore(); // again write inputted data into the file. outfile << data << endl; // close the opened file. outfile.close(); // open a file in read mode. ifstream infile; infile.open("afile.dat"); cout << "Reading from the file" << endl; infile >> data; // write the data at the screen. cout << data << endl; // again read the data from the file and display it. infile >> data; cout << data << endl; // close the opened file. infile.close(); return 0; }
上記のコードをコンパイルして実行すると、次のサンプル入力と出力が生成されます −
$./a.out Writing to the file Enter your name: Zara Enter your age: 9 Reading from the file Zara 9
上記の例では、外部から行を読み取る getline() 関数や、前の read ステートメントによって残された余分な文字を無視する ignore() 関数など、cin オブジェクトの追加関数を使用しています。
ファイル位置ポインター
両方の istream と ostream ファイル位置ポインターを再配置するためのメンバー関数を提供します。これらのメンバー関数は seekg です ("seek get") istream および seekp の場合 (「シーク プット」) ostream の場合。
通常、seekg と seekp の引数は長整数です。 2 番目の引数を指定して、シーク方向を示すことができます。シーク方向は ios::beg です (デフォルト) ストリームの先頭に相対的な位置を指定する場合、ios::cur ストリームまたは ios::end 内の現在の位置に相対的な配置用 ストリームの終わりに相対的な位置付け用。
ファイル位置ポインターは、ファイル内の位置をファイルの開始位置からのバイト数で指定する整数値です。 「get」ファイル位置ポインターを配置するいくつかの例は次のとおりです-
// position to the nth byte of fileObject (assumes ios::beg) fileObject.seekg( n ); // position n bytes forward in fileObject fileObject.seekg( n, ios::cur ); // position n bytes back from end of fileObject fileObject.seekg( n, ios::end ); // position at end of fileObject fileObject.seekg( 0, ios::end );
C言語