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

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

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

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

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

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

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::ifstream; 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 <iostream>
#include <fstream>
#include <vector>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::ifstream; 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 <iostream>
#include <fstream>
#include <vector>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::ifstream; 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;
}
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - C++ File