Ler um ficheiro em C
-
Utilize
fopen
efread
funções para ler ficheiro de texto em C -
Utilize as funções
fopen
egetline
para ler o ficheiro de texto em C
Este artigo irá introduzir múltiplos métodos sobre como ler um ficheiro de texto em C.
Utilize fopen
e fread
funções para ler ficheiro de texto em C
As funções fopen
e fread
fazem parte das instalações de entrada/saída da biblioteca padrão C.
O fopen
é utilizado para abrir o ficheiro dado como um fluxo e dar ao programa a manivela para o manipular conforme necessário. São necessários dois parâmetros, o nome do ficheiro como string const char*
e o modo em que se abre o ficheiro especificado com valores predefinidos (r
, w
, a
, r+
, w+
, a+
). Quando precisamos de ler um ficheiro, passamos r
como o segundo parâmetro para abrir o ficheiro em modo só de leitura.
Por outro lado, a função fread
é o actor principal na condução da operação de leitura a partir de um fluxo de ficheiro já aberto. É necessário um ponteiro para guardar em buffer onde os bytes lidos devem ser armazenados como o primeiro argumento. O segundo e terceiro argumentos especificam quantos itens a ler a partir do fluxo e que tamanho tem cada um deles. O último argumento é o ponteiro FILE*
para o próprio fluxo de ficheiro aberto.
Note-se que também estamos a utilizar a função stat
para recuperar o tamanho do ficheiro e ler todo o conteúdo numa única chamada fread
. O tamanho do ficheiro é passado para a função malloc
também para atribuir espaço suficiente para armazenar todo o conteúdo do ficheiro. No entanto, a alocação dinâmica de memória deve ser libertada pela função free
e os ficheiros abertos devem ser fechados com fclose
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
int main(void) {
const char* filename = "input.txt";
FILE* input_file = fopen(filename, "r");
if (!input_file) exit(EXIT_FAILURE);
struct stat sb;
if (stat(filename, &sb) == -1) {
perror("stat");
exit(EXIT_FAILURE);
}
char* file_contents = malloc(sb.st_size);
fread(file_contents, sb.st_size, 1, input_file);
printf("%s\n", file_contents);
fclose(input_file);
free(file_contents);
exit(EXIT_SUCCESS);
}
Utilize as funções fopen
e getline
para ler o ficheiro de texto em C
Em alternativa, podemos saltar a recuperação do tamanho do ficheiro com a função stat
e em vez disso iterar sobre cada linha do ficheiro até ao fim, utilizando a função getline
. A função getline
lê a entrada da string a partir do fluxo de ficheiro dado. Como o nome sugere, a função recupera todos os bytes até ser encontrado o carácter da nova linha.
A função getline
tem três parâmetros, o primeiro dos quais armazena os bytes lidos. Pode ser declarado como char*
e definido como NULL
. Entretanto, se o segundo argumento for o endereço do inteiro 0
, a getline
atribui automaticamente memória dinâmica para o buffer, que deve ser libertada pelo utilizador, daí a chamada para a função free
no final do programa.
Note-se que estes parâmetros podem ter valores diferentes se necessário, todos eles explicados nesta função manual. O terceiro parâmetro é o ponteiro FILE*
do fluxo de ficheiros aberto.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
int main(void) {
const char* filename = "input.txt";
FILE* input_file = fopen(filename, "r");
if (!input_file) exit(EXIT_FAILURE);
char* contents = NULL;
size_t len = 0;
while (getline(&contents, &len, input_file) != -1) {
printf("%s", contents);
}
fclose(input_file);
free(contents);
exit(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