如何在 C++ 中逐个读取文件中的字符

Jinku Hu 2023年10月12日
  1. 使用 ifstreamget 方法按字符读取文件
  2. 使用 getc 函数按字符读取文件
  3. 使用 fgetc 函数按字符读取文件
如何在 C++ 中逐个读取文件中的字符

本文将介绍几种在 C++ 中如何用 char 逐个读取文本文件字符的方法。

使用 ifstreamget 方法按字符读取文件

用 C++ 的方式处理文件 I/O 最常见的方法是使用 std::ifstream。首先,用需要打开的文件名的参数初始化一个 ifstream 对象。注意,if 语句来验证文件的打开是否成功。接下来,我们使用内置的 get 函数逐个字符的检索文件内的文本,并将它们 push_backvector 容器中。最后,我们将向量元素输出到控制台进行演示。

#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 函数按字符读取文件

另一种按字符读取文件的方法是使用 getc 函数,它以 FILE*流作为参数,如果有的话,就读取下一个字符。接下来,应该对输入的文件流进行迭代,直到到达最后一个字符,这就用 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 完全相同。在这种情况下,在 if 语句中使用 fgetc 返回值,因为如果达到文件流的末尾,它就返回 EOF。按照建议,在程序退出之前,我们用 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;
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - C++ File