C++ で Char でファイルを読む
胡金庫
2023年10月12日
-
ifstream
とget
メソッドを使ってファイルの char を char で読み込む -
関数
getc
を使用してファイルを文字ごとに読み込む -
関数
fgetc
を用いてファイルの文字列を文字ごとに読み込む
この記事では、C++ でテキストファイル char
を char
で読み込む方法をいくつか説明します。
ifstream
と get
メソッドを使ってファイルの 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;
}
著者: 胡金庫