Leggi un file in C
-
Usa le funzioni
fopen
efread
per leggere file di testo in C -
Usa le funzioni
fopen
egetline
per leggere file di testo in C
Questo articolo introdurrà più metodi su come leggere un file di testo in C.
Usa le funzioni fopen
e fread
per leggere file di testo in C
Le funzioni fopen
e fread
fanno parte delle funzionalità di input / output della libreria standard C.
fopen
è usato per aprire il file dato come flusso e dare al programma l’handle per manipolarlo secondo necessità. Richiede due parametri, il nome del file come const char*
stringa e la modalità in cui aprire il file specificato con valori predefiniti (r
, w
, a
, r
, w
, a
). Quando abbiamo bisogno di leggere un file, passiamo r
come secondo parametro per aprire il file in modalità di sola lettura.
D’altra parte, la funzione fread
è l’attore principale nella conduzione dell’operazione di lettura da un flusso di file già aperto. Richiede un puntatore al buffer in cui i byte letti devono essere memorizzati come primo argomento. Il secondo e il terzo argomento specificano quanti elementi leggere dal flusso e quale dimensione ha ciascuno di essi. L’ultimo argomento è il puntatore FILE*
al flusso di file aperto stesso.
Si noti che stiamo anche usando la funzione stat
per recuperare la dimensione del file e leggere l’intero contenuto in una singola chiamata fread
. La dimensione del file viene passata anche alla funzione malloc
per allocare spazio sufficiente per memorizzare l’intero contenuto del file. Attenzione però, le allocazioni dinamiche di memoria dovrebbero essere liberate dalla funzione free
e i file aperti dovrebbero essere chiusi con 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);
}
Usa le funzioni fopen
e getline
per leggere file di testo in C
In alternativa, possiamo saltare il recupero della dimensione del file con la funzione stat
e invece iterare su ogni linea del file fino a raggiungere la fine utilizzando la funzione getline
. getline
legge la stringa in ingresso dal flusso di file specificato. Come suggerisce il nome, la funzione recupera tutti i byte finché non viene trovato il carattere di nuova linea.
getline
accetta tre parametri, il primo dei quali memorizza i byte letti. Può essere dichiarato come char*
e impostato su NULL
. Nel frattempo, se il secondo argomento è l’indirizzo dell’intero 0
, la getline
alloca automaticamente la memoria dinamica per il buffer, che dovrebbe essere liberato dall’utente, da qui la chiamata alla funzione free
alla fine del programma.
Notare che questi parametri possono avere valori diversi se necessario, tutti spiegati in questa funzione manuale. Il terzo parametro è il puntatore FILE*
del flusso di file aperto.
#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