C++でファイル書き込み・追記方法の完全ガイド5選

C++でのファイル書き込みと追記を学ぶためのガイド記事のサムネイルC++
この記事は約11分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事では、初心者から上級者までがC++でのファイル書き込みと追記をマスターするための手助けをします。

ファイルの基本的な操作はプログラミングにおいて欠かせないスキルです。

ここでは、C++を用いてファイルにデータを書き込む方法を、実際のサンプルコードを交えて詳しく説明していきます。

それでは、C++のファイル操作の基本から始めましょう。

●C++でのファイル書き込みの基本

C++でファイル書き込みを行うには、標準ライブラリのfstreamを利用します。

fstreamライブラリには、ifstream(読み取り専用)、ofstream(書き込み専用)、fstream(読み書き両用)といったクラスが含まれています。

ここでは、基本的なofstreamを用いてファイルに書き込む方法を見ていきましょう。

○サンプルコード1:新規ファイルへの書き込み方法

新規ファイルへの書き込みは、非常に基本的な操作です。

下記のサンプルコードでは、新しいテキストファイルを作成し、その中に文字列を書き込みます。

#include <fstream>
#include <iostream>

int main() {
    std::ofstream file("example.txt");
    if (file.is_open()) {
        file << "Hello, C++ file writing!";
        file.close();
    } else {
        std::cout << "ファイルを開けませんでした。";
    }
    return 0;
}

このコードではまず、ofstreamオブジェクトを作成し、”example.txt”という名前の新規ファイルを開きます。

ファイルが正常に開けたかどうかを確認した後、<<演算子を使用してファイルに文字列を書き込みます。

最後にファイルを閉じています。

このコードを実行すると、”example.txt”というファイルが作成され、”Hello, C++ file writing!”というテキストが書き込まれます。

○サンプルコード2:既存ファイルへの書き込み方法

既存のファイルへの書き込みは、新規ファイルの作成とは少し異なります。

下記のコードでは、既存のファイルを開き、新たな内容を追加します。

#include <fstream>
#include <iostream>

int main() {
    std::ofstream file("example.txt", std::ios::app);
    if (file.is_open()) {
        file << "\nAdding new line to existing file.";
        file.close();
    } else {
        std::cout << "ファイルを開けませんでした。";
    }
    return 0;
}

ここでは、ofstreamオブジェクトを作成する際に、第二引数にstd::ios::appを指定しています。

これは、ファイルの末尾に書き込む(追記する)モードを表します。

このモードでファイルを開くと、ファイルの既存の内容を保持したまま、新しい内容を追加することができます。

●C++でのファイルの追記方法

C++におけるファイルの追記は、データの保存やログの記録など、多くのアプリケーションで非常に重要な機能です。

追記することで、既存のファイルに新しいデータを追加できます。

ここでは、C++を使用してファイルの末尾に追記する基本的な方法と、特定の位置に追記する応用的な方法を紹介します。

○サンプルコード3:ファイル末尾への追記方法

ファイルの末尾に追記するには、ファイルをオープンする際に追記モードを指定します。

下記のコードは、既存のファイルに新しい行を追加する例です。

#include <fstream>
#include <iostream>

int main() {
    std::ofstream file("example.txt", std::ios::app);
    if (file.is_open()) {
        file << "\n新しい行を追記します。";
        file.close();
    } else {
        std::cout << "ファイルを開けませんでした。";
    }
    return 0;
}

このコードでは、std::ios::appフラグを使用してファイルを追記モードで開いています。

これにより、ファイルの末尾に新しいデータが追加されます。

このコードを実行すると、”example.txt”ファイルの最後に「新しい行を追記します。」というテキストが追加されます。

○サンプルコード4:特定位置への追記方法

特定の位置に追記する場合は、ファイルポインタを適切な位置に移動する必要があります。

下記のコードは、ファイルの特定の位置にデータを追加する方法を表しています。

#include <fstream>
#include <iostream>

int main() {
    std::fstream file("example.txt", std::ios::in | std::ios::out);
    if (file.is_open()) {
        file.seekp(10, std::ios::beg); // ファイルの先頭から10バイトの位置にポインタを移動
        file << "特定の位置に追記";
        file.close();
    } else {
        std::cout << "ファイルを開けませんでした。";
    }
    return 0;
}

このコードでは、std::fstreamを使用してファイルを読み書きモードで開きます。

file.seekp(10, std::ios::beg)行で、ファイルの先頭から10バイトの位置にファイルポインタを移動しています。

その位置に「特定の位置に追記」というテキストを書き込んでいます。これにより、ファイルの任意の位置にデータを追記することができます。

この方法を用いることで、ファイルの特定の部分に対して細かなデータの操作が可能になります。

●よくあるエラーと対処法

C++におけるファイル操作は非常に強力ですが、様々なエラーに直面することもあります。

これらのエラーを理解し、適切に対処することで、より効率的で安全なコードを書くことができます。

ここでは、ファイル操作でよくあるエラーとその対処法を紹介します。

○エラー例1:ファイルが開けない場合の対処法

ファイルが開けないエラーは、特に初心者にとっては混乱の原因となりがちです。

この問題には様々な原因がありますが、最も一般的なのはファイルパスの誤り、アクセス権限の不足、またはファイルが存在しないことです。

例えば、下記のコードはファイルを開く際にエラーをチェックし、エラーがある場合はメッセージを表表しています。

#include <fstream>
#include <iostream>

int main() {
    std::ifstream file("example.txt");
    if (!file) {
        std::cout << "ファイルが開けませんでした。ファイル名とパスを確認してください。";
    } else {
        // ファイル操作
        file.close();
    }
    return 0;
}

このコードでは、ファイルが正しく開けなかった場合にエラーメッセージを出力しています。

ファイルパスの誤りが原因の場合は、パスを正しく指定して再試行してください。

アクセス権限の問題であれば、適切な権限をファイルに付与するか、管理者としてプログラムを実行する必要があります。

○エラー例2:書き込みができない場合の対処法

ファイルに書き込む際、さまざまな理由でエラーが発生することがあります。

最も一般的なのは、ファイルが読み取り専用であるか、既に他のプログラムによって使用されている場合です。

下記のコードは、ファイルに書き込む際のエラーをチェックしています。

#include <fstream>
#include <iostream>

int main() {
    std::ofstream file("example.txt");
    if (!file) {
        std::cout << "ファイルに書き込むことができません。";
    } else {
        file << "データの書き込み";
        file.close();
    }
    return 0;
}

このコードでは、ファイルが開けたが書き込みができない場合にエラーメッセージを表示します。

この問題を解決するには、ファイルの属性を確認し、必要に応じて書き込み可能に設定するか、他のプログラムがファイルを使用していないことを確認してください。

●C++ファイル操作の応用例

C++におけるファイル操作の応用は多岐にわたります。

例えば、ファイルからデータを読み取り、そのデータに基づいて新しいデータを追記するという処理は、実際のアプリケーションで非常に有用です。

このような応用例は、ファイル処理の理解を深め、より複雑なプログラムを作成する基礎となります。

○サンプルコード5:ファイルからのデータ読み取りと追記

ここでは、ファイルから特定のデータを読み取り、条件に応じて新しいデータを追記する一連の処理を行う方法を見ていきます。

例として、あるテキストファイルから数値を読み取り、それが特定の基準を満たす場合にのみ新たな数値を追記するプログラムを考えます。

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ifstream infile("input.txt");
    std::ofstream outfile("output.txt", std::ios::app);
    int number;

    if (infile.is_open() && outfile.is_open()) {
        while (infile >> number) {
            // 条件に応じてデータを追記する
            if (number > 10) {
                outfile << number * 2 << "\n";
            }
        }
        infile.close();
        outfile.close();
    } else {
        std::cout << "ファイルを開けませんでした。";
    }
    return 0;
}

このコードではまず、入力用と出力用のファイルストリームを開いています。

入力ファイルからは整数を一つずつ読み取り、その数値が10より大きい場合に、その数値の2倍を出力ファイルに追記しています。

このような処理は、データ分析やファイル変換の自動化など、様々なシナリオで応用可能です。

この例では、C++でのファイル入出力操作を組み合わせることで、データの読み取りと条件に基づく処理を行っています。

C++のファイル操作はこのように非常に柔軟であり、プログラムに必要なデータ処理を実現するための強力なツールです。

●エンジニアなら知っておくべき豆知識

C++でのファイル操作において、エンジニアとして知っておくべき重要なポイントがいくつかあります。

これらの知識は、より効率的かつ安全なプログラミングに貢献します。

○豆知識1:ファイル操作の効率化テクニック

ファイル操作を効率化するためには、バッファリングの活用、ファイルストリームの適切な開閉、エラーチェックの徹底などが重要です。

大規模なデータ処理を行う際、これらのテクニックを適用することで、プログラムのパフォーマンスを向上させることができます。

ファイルを扱う際には、必ず開いたファイルストリームを適切に閉じ、リソースの無駄遣いを避けることも大切です。

○豆知識2:安全なファイル処理のためのベストプラクティス

安全なファイル処理を行うためには、いくつかのベストプラクティスを実践する必要があります。

ファイル操作を行う際には、常にファイルパスを正確に検証し、不正なパスが指定されていないかを確認します。

また、ファイルに適切なアクセス権限を設定し、不要な権限を付与しないように注意が必要です。

さらに、ファイル操作のエラーチェックを常に行い、例外やエラーが発生した場合に適切に対応します。

機密性の高いデータを扱う際には、データの暗号化やセキュリティ対策を施すことで、データの保護を強化できます。

これらのプラクティスを適用することで、より安全で信頼性の高いファイル操作を実現できます。

まとめ

この記事を通じて、C++でのファイル書き込みと追記の基本から応用までを詳細に解説しました。

初心者から上級者までが理解できるように、具体的なサンプルコードを用いて、ファイル操作の各側面を明確にしました。

ファイル処理の効率化テクニックや安全な処理のベストプラクティスを習得することで、C++におけるファイル操作のスキルを大いに向上させることができるでしょう。

これらの知識と技術を身につけることで、あらゆる種類のC++プログラミングプロジェクトにおいて、より効果的かつ効率的なファイル操作を行うことが可能になります。