C++ で Char でファイルを読む

胡金庫 2023年10月12日
  1. ifstreamget メソッドを使ってファイルの char を char で読み込む
  2. 関数 getc を使用してファイルを文字ごとに読み込む
  3. 関数 fgetc を用いてファイルの文字列を文字ごとに読み込む
C++ で Char でファイルを読む

この記事では、C++ でテキストファイル charchar で読み込む方法をいくつか説明します。

ifstreamget メソッドを使ってファイルの char を char で読み込む

C++ の方法でファイルの入出力を扱う最も一般的な方法は、std::ifstream を使用することです。最初に、ifstream オブジェクトがオープンしたいファイル名の引数で初期化されます。このとき、if 文はファイルのオープンに成功したかどうかを確認することに注意します。次に、組み込みの get 関数を用いてファイル内のテキストを文字列ごとに取得し、push_back して vector コンテナに格納します。最後に、デモンストレーションのためにベクトル要素をコンソールに出力します。

#include <fstream>
#include <iostream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;

int main() {
  string filename("input.txt");
  vector<char> bytes;
  char byte = 0;

  ifstream input_file(filename);
  if (!input_file.is_open()) {
    cerr << "Could not open the file - '" << filename << "'" << endl;
    return EXIT_FAILURE;
  }

  while (input_file.get(byte)) {
    bytes.push_back(byte);
  }
  for (const auto &i : bytes) {
    cout << i << "-";
  }
  cout << endl;
  input_file.close();

  return EXIT_SUCCESS;
}

関数 getc を使用してファイルを文字ごとに読み込む

これは FILE* のストリームを引数に取り、次の文字があればそれを読み出すものです。次に、入力されたファイルストリームは最後の char に達するまで反復処理されるべきであり、これは feof 関数で実装されており、ファイルの終端に達したかどうかをチェックします。開いているファイルストリームが不要になったら、常に閉じることが推奨されていることに注意してください。

#include <fstream>
#include <iostream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;

int main() {
  string filename("input.txt");
  vector<char> bytes;

  FILE* input_file = fopen(filename.c_str(), "r");
  if (input_file == nullptr) {
    return EXIT_FAILURE;
  }

  unsigned char character = 0;
  while (!feof(input_file)) {
    character = getc(input_file);
    cout << character << "-";
  }
  cout << endl;
  fclose(input_file);

  return EXIT_SUCCESS;
}

関数 fgetc を用いてファイルの文字列を文字ごとに読み込む

fgetc は前の関数の代替メソッドであり、getc と全く同じ機能を実装しています。この場合、fgetc の戻り値はファイルストリームの終端に達した場合に EOF を返すので、if 文の中では fgetc の戻り値を用いることになります。推奨されるのは、プログラム終了前に fclose を呼び出してストリームを閉じることです。

#include <fstream>
#include <iostream>
#include <vector>

using std::cerr;
using std::cout;
using std::endl;
using std::ifstream;
using std::string;
using std::vector;

int main() {
  string filename("input.txt");
  vector<char> bytes;

  FILE* input_file = fopen(filename.c_str(), "r");
  if (input_file == nullptr) {
    return EXIT_FAILURE;
  }

  int c;
  while ((c = fgetc(input_file)) != EOF) {
    putchar(c);
    cout << "-";
  }
  cout << endl;
  fclose(input_file);

  return EXIT_SUCCESS;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ File