Ler Ficheiro Char por Char em C++
-
Utilizar
ifstream
eget
Método para ler ficheiro de texto Char por Char -
Utilizamos a função
getc
para ler ficheiro char por char -
Utilize a função
fgetc
para ler Ficheiro Char por Char
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;
}
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