C++ でファイルに書き込む

胡金庫 2023年10月12日
  1. ファイルに書き込むには fstream<< 演算子を使用する
  2. fstream および write 関数を使用してファイルに書き込む
  3. fwrite 関数を使ってファイルに書き込む
C++ でファイルに書き込む

この記事では、C++ でファイルに書き込む方法をいくつか説明します。

ファイルに書き込むには fstream<< 演算子を使用する

C++ のファイル I/O は、ストリームの操作と配置のための複数の組み込みメソッドを提供する fstream クラスを使用して処理されます。fstream オブジェクトが宣言されたら、open 関数を呼び出して、ファイルの名前とファイルを開くモードを引数として渡すことができます。

ファイルに書き込む場合は、std::ios_base::out モードを指定します。次に、ファイルがストリームオブジェクトと正常に関連付けられたかどうか、つまり if の状態で is_open メソッドを呼び出したかどうかを確認します。この時点で、ファイルは << 演算子を使って入力を受け取り、必要に応じて出力を処理する準備ができています。

また、else ブロックはエラーロギングの目的で利用することもできますし、フォールトトレラントなプログラム実行のためにエラー処理ルーチンを実装することもできます。

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string filename("tmp.txt");
  fstream file_out;

  file_out.open(filename, std::ios_base::out);
  if (!file_out.is_open()) {
    cout << "failed to open " << filename << '\n';
  } else {
    file_out << "Some random text to write." << endl;
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Done Writing!

fstream および write 関数を使用してファイルに書き込む

ファイルに書き込むもう一つの方法は、組み込みの fstream オブジェクトから呼び出すことができる write 関数です。関数 write は文字列ポインタとそのアドレスに格納されているデータのサイズを受け取ります。その結果、呼び出したストリームオブジェクトに関連付けられたファイルにデータが挿入されます。

以下のコードサンプルでは、open 関数呼び出しのステータスを表示することで、最小限のエラー報告が可能であることを示していますが、実際のアプリケーションでは、より堅牢な例外処理が必要となります。

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;

int main() {
  string text("Some huge text to write to\n");
  string filename2("tmp2.txt");
  fstream outfile;

  outfile.open(filename2, std::ios_base::out);
  if (!outfile.is_open()) {
    cout << "failed to open " << filename2 << '\n';
  } else {
    outfile.write(text.data(), text.size());
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Done Writing!

fwrite 関数を使ってファイルに書き込む

あるいは、C 言語のファイル I/O から fwrite 関数を使ってファイルに書き込むこともできます。fwritevoid ポインタからデータを取得し、プログラマはそのアドレスに格納されているアイテムの数と各アイテムのサイズを渡す責任があります。この関数はファイルストリームが FILE* 型である必要があり、これは fopen 関数を呼び出すことで取得できます。

fwrite は操作が成功した場合にファイルに書き込まれたアイテムの数を返すことに注意してください。

#include <fstream>
#include <iostream>

using std::cout;
using std::endl;
using std::ofstream;
using std::string;

int main() {
  string text("Some huge text to write to\n");
  string filename3("tmp3.txt");

  FILE *o_file = fopen(filename3.c_str(), "w+");
  if (o_file) {
    fwrite(text.c_str(), 1, text.size(), o_file);
    cout << "Done Writing!" << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Done Writing!
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ File