Ler Ficheiro Char por Char em C++

Jinku Hu 12 outubro 2023
  1. Utilizar ifstream e get Método para ler ficheiro de texto Char por Char
  2. Utilizamos a função getc para ler ficheiro char por char
  3. Utilize a função fgetc para ler Ficheiro Char por Char
Ler Ficheiro Char por Char em C++

Este artigo explicará vários métodos de como ler um ficheiro de texto char por char em C++.

Utilizar ifstream e get Método para ler ficheiro de texto Char por Char

A maneira mais comum de lidar com a E/S de ficheiros a maneira C++ é utilizar std::ifstream. No início, um objecto ifstream é inicializado com o argumento do nome do ficheiro que precisa de ser aberto. Note-se que, a declaração if verifica se a abertura de um ficheiro foi bem sucedida. A seguir, utilizamos a função integrada get para recuperar o texto dentro do ficheiro char por char e push_back no contentor vector. Por fim, enviamos elementos vectoriais para a consola para fins de demonstração.

#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;
}

Utilizamos a função getc para ler ficheiro char por char

Outro método para ler ficheiro char por char é utilizar a função getc, que toma o FILE* como argumento e lê o próximo carácter, se disponível. A seguir, o fluxo de ficheiro de entrada deve ser iterado até ser atingido o último char, e isso é implementado com a função feof, verificando se o fim do ficheiro foi atingido. Note-se que é sempre recomendado fechar os fluxos de ficheiros abertos quando já não são necessários.

#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;
}

Utilize a função fgetc para ler Ficheiro Char por Char

O getc é um método alternativo à função anterior, que implementa exactamente a mesma funcionalidade que o getc. Neste caso, o valor de retorno fgetc é utilizado na declaração if, uma vez que devolve o EOF se o fim do fluxo de ficheiro for alcançado. Como recomendado, antes da saída do programa, fechamos o fluxo com uma chamada 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;
}
Autor: 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 Facebook

Artigo relacionado - C++ File