如何在 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