Bonjour,
Voila j'ai un problème , j'ai fait une partie de programme qui est
chargé d'allouer juste assez de mémoire a un pointeur de type
char pour acceuillir le contenut d'un fichier (sachant que 1 caractères
= 1 octet). Cet ensemble d'instrustion fonctionne très bien... enfin il
y a un petit hic!. Je père un octet à chaque retour a la ligne dans le
fichier.
Je m'explique
exemple un fichier contenant :
Bonjour
ceci est un test
tout simplement
Il y a 2 retour a la ligne et bien j'alloue 2 octet en trop. Cela n'est
pas trop grave pour les petit fichier, mais lorsque l'on arrive a des
gros fichier de 123Mo ca fait bcp en trop.
Donc je voulait savoir si il n'y a pas une formule magique :D, une API,
que sais-je qui permettrai de savoir combien de retour a la ligne il y
a. Ou alors un autre code permettant de faire ce que je souhaite :p.
Car bon je peut savoir combien de retour a la ligne il y a mais en
lisant le fichier caractère par caractère et bon c'est pas une bonne
optimisation :p.
Voici mon code au cas ou:
int main(int argc, char *argv[]){
WIN32_FILE_ATTRIBUTE_DATA w32fad;
FILE *fichier;
char D_szFilePath[MAX_PATH];
char D_szPhrase[400];
char *D_ptText;
int D_lFileSize;
printf("\n Introduisez le nom du fichier et le chemin de celui-ci :_");
gets(D_szFilePath);
GetFileAttributesEx(D_szFilePath,GetFileExInfoStandard,&w32fad);
/* On alloue de la mémoire au pointeur phrase , de la taille du fichier */
D_ptText=(char*)malloc(sizeof(char)*w32fad.nFileSizeLow);
strcpy(D_ptText,"");
fichier=fopen(D_szFilePath,"r");
while(fgets(D_szPhrase,400,fichier)!=0){
strcat(D_ptText,D_szPhrase);
}
fclose(fichier);
D_lFileSize=strlen(D_ptText);
/* Code temporaire , juste pour voir les différentes tailles */
printf("\n SIZE TEXT : %d",D_lFileSize);
printf("\n SIZE FICHIER : %d",w32fad.nFileSizeLow);
/* Code temporaire, juste pour voir le résultat */
printf("\n%s",D_ptText);
getch();
free(D_ptText);
return 0;
}