C++によるファイルの読み書き

C++でのファイル操作の基本

C++では、ファイルの読み書きを行うために <fstream> ライブラリを使用します。このライブラリは、ファイルストリームを操作するための ifstream(入力/読み込み用)、ofstream(出力/書き込み用)、fstream(入出力両用)の3つのデータ型を提供しています。

ファイルのオープン

ファイルを開くには、ファイルストリームオブジェクトを作成し、open メソッドを使用します。例えば、読み込み用にファイルを開くには次のようにします:

std::ifstream inputFile;
inputFile.open("example.txt");

ファイルの読み書き

ファイルから読み込むには >> 演算子を、ファイルに書き込むには << 演算子を使用します。例えば:

std::string line;
if (inputFile.is_open())
{
    while (getline(inputFile, line))
    {
        std::cout << line << '\n';
    }
    inputFile.close();
}

ファイルのクローズ

ファイル操作が終了したら、close メソッドを使用してファイルを閉じます。これは、オープンしたファイルを適切に閉じることで、データの損失や破損を防ぐために重要です。

inputFile.close();

以上がC++でのファイル操作の基本的な流れです。次の節では、具体的な読み書きの方法について詳しく見ていきましょう。

ファイルの読み込みと書き込みの方法

C++でのファイルの読み込みと書き込みは、ifstreamofstreamを使用して行います。

ファイルの読み込み

ファイルからデータを読み込む基本的な方法は以下の通りです:

std::ifstream inputFile("example.txt");
std::string line;

if (inputFile.is_open())
{
    while (getline(inputFile, line))
    {
        std::cout << line << '\n';
    }
    inputFile.close();
}

このコードは、”example.txt”という名前のファイルを開き、その内容を行ごとに読み込み、それぞれの行を出力します。

ファイルへの書き込み

ファイルへの書き込みは、ofstreamを使用して行います。以下に基本的な例を示します:

std::ofstream outputFile("output.txt");

if (outputFile.is_open())
{
    outputFile << "This is a line.\n";
    outputFile << "This is another line.\n";
    outputFile.close();
}

このコードは、”output.txt”という名前のファイルを開き(存在しない場合は新しく作成します)、そのファイルに2行のテキストを書き込みます。

以上がC++でのファイルの読み込みと書き込みの基本的な方法です。次の節では、ファイルストリームの利用について詳しく見ていきましょう。

ファイルストリームの利用

C++では、ファイルストリームという概念を利用してファイルの読み書きを行います。ファイルストリームは、データの流れを抽象化したもので、データの入力元や出力先をファイルとして扱うことができます。

ifstreamとofstream

C++の<fstream>ライブラリには、ifstreamofstreamという2つの主要なファイルストリームクラスが含まれています。これらは、それぞれ入力ファイルストリームと出力ファイルストリームを表しています。

ifstreamは、ファイルからのデータの読み込みを行うためのストリームで、ofstreamは、ファイルへのデータの書き込みを行うためのストリームです。

ファイルストリームのオープンとクローズ

ファイルストリームを使用するには、まずストリームをオープン(開く)必要があります。これは、ifstreamofstreamのオブジェクトを作成することで行います。

std::ifstream inputFile("example.txt");  // ファイルを開く

ファイル操作が終了したら、必ずストリームをクローズ(閉じる)必要があります。これは、closeメソッドを使用して行います。

inputFile.close();  // ファイルを閉じる

以上がC++でのファイルストリームの基本的な利用方法です。次の節では、バイナリ形式での入出力について詳しく見ていきましょう。

バイナリ形式での入出力

C++では、テキスト形式だけでなく、バイナリ形式でのファイル入出力も可能です。バイナリ形式での入出力は、データをそのままのバイト列として読み書きするため、テキスト形式での入出力とは異なる点がいくつかあります。

バイナリ形式でのファイルオープン

バイナリ形式でファイルを開くには、ifstreamofstreamのオブジェクトを作成する際に、std::ios::binaryフラグを指定します。

std::ifstream inputFile("example.bin", std::ios::binary);
std::ofstream outputFile("output.bin", std::ios::binary);

バイナリ形式での読み書き

バイナリ形式での読み書きは、readメソッドとwriteメソッドを使用します。これらのメソッドは、バイト列を直接読み書きするため、テキスト形式での<<演算子や>>演算子とは異なります。

// バイナリ形式での書き込み
int value = 123;
outputFile.write(reinterpret_cast<char*>(&value), sizeof(value));

// バイナリ形式での読み込み
int readValue;
inputFile.read(reinterpret_cast<char*>(&readValue), sizeof(readValue));

以上がC++でのバイナリ形式での入出力の基本的な方法です。次の節では、エラーハンドリングと例外処理について詳しく見ていきましょう。

エラーハンドリングと例外処理

C++でのファイル操作では、エラーハンドリングと例外処理が重要な役割を果たします。ファイルが存在しない、アクセス権限がない、ディスクスペースが不足しているなど、様々な理由でファイル操作に失敗する可能性があります。

エラーチェック

ファイルを開く際や読み書きを行う際には、常にエラーをチェックすることが重要です。ifstreamofstreamのメソッドは、操作が成功したかどうかを示すブール値を返すので、これを利用してエラーチェックを行うことができます。

std::ifstream inputFile("example.txt");

if (!inputFile) {
    std::cerr << "Error: Unable to open file.\n";
    return 1;
}

例外処理

C++では、エラーが発生した場合にプログラムの実行を中断し、エラーを処理するためのコードに制御を移すことができます。これを例外処理と呼びます。

例外処理を行うためには、tryブロックとcatchブロックを使用します。tryブロック内でエラーが発生すると、プログラムの制御は対応するcatchブロックに移ります。

try {
    std::ifstream inputFile("example.txt");

    if (!inputFile) {
        throw std::runtime_error("Error: Unable to open file.");
    }

    // ファイルの読み書きを行うコード
} catch (const std::exception& e) {
    std::cerr << e.what() << '\n';
    return 1;
}

以上がC++でのエラーハンドリングと例外処理の基本的な方法です。これらを適切に使用することで、予期しないエラーからプログラムを守ることができます。この記事がC++でのファイル操作の理解に役立つことを願っています。それでは、Happy Coding! 🚀

投稿者 dodo

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です