J'essaie de lire tout le contenu d'un fichier texte. Voici le code que j'ai écrit.Lire tout le contenu d'un fichier texte - C
#include <stdio.h>
#include <stdlib.h>
#define PAGE_SIZE 1024
static char *readcontent(const char *filename)
{
char *fcontent = NULL, c;
int index = 0, pagenum = 1;
FILE *fp;
fp = fopen(filename, "r");
if(fp) {
while((c = getc(fp)) != EOF) {
if(!fcontent || index == PAGE_SIZE) {
fcontent = (char*) realloc(fcontent, PAGE_SIZE * pagenum + 1);
++pagenum;
}
fcontent[index++] = c;
}
fcontent[index] = '\0';
fclose(fp);
}
return fcontent;
}
static void freecontent(char *content)
{
if(content) {
free(content);
content = NULL;
}
}
C'est l'utilisation
int main(int argc, char **argv)
{
char *content;
content = readcontent("filename.txt");
printf("File content : %s\n", content);
fflush(stdout);
freecontent(content);
return 0;
}
Depuis que je suis nouveau à C, je me demande si ce code semble parfait? Voyez-vous des problèmes/améliorations?
Compilateur utilisé: GCC. Mais ce code devrait être multi-plateforme.
Toute aide serait appréciée.
Modifier
Voici le code mis à jour avec fread
et ftell
. Je me demande quelle sera la complexité relative de cette fonction?
Je pense à peine que l'utilisation de ce nom de fichier vous donnera beaucoup de félicitations –
ahh .. Désolé pour cela. Je testais et j'ai oublié de l'enlever. Extremement Désolé. –
Je pense qu'en général, vous devriez essayer de travailler en morceaux fixes; Dans ce cas, vous lirez dans PAGE_SIZE octets à la fois (ou moins si c'est le dernier morceau) et en imprimant chaque morceau comme vous les lisez. – wj32