calculer la taille d'un fichier texte en C

calculer la taille d'un fichier texte en C - C - Programmation

Marsh Posté le 15-05-2015 à 01:16:40    

Bonjour, je suis sous Win7 et je travaille avec Dev-C++,
Je souhaiterai calculer la taille d'un fichier .txt nommé text à l'aide du programme en C ci-dessous (le prgC et le fichier sont dans le même dossier).
Le programme se compile et renvoie TAILLE : -1 au lieu de la vrai taille du fichier (4 096 octets),
Si j’enlève ("main.c" ) à la fin du programme il me renvoie TAILLE : 4199056
qlqn pourrait-il me dire quelle est l'erreur dans ce programme
merci d’avance
------------------------------------------------------  
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
long file_size(char *text)
{
   /*Ouverture du fichier*/
   FILE *file = fopen(text, "r" );
   long ret;
   if(file == NULL)
   {
      return -1;
   }
   /*On place le curseur à la fin*/
   fseek(file, 0, SEEK_END);
   /*On récupére la position courante*/
   ret = ftell(file);
   fclose(file);
   return ret;
}
int main(int argc, char *argv[])
{
  printf("TAILLE : %ld\n", file_size("main.c" ));
  Sleep(2000);
  return 0;
}

Reply

Marsh Posté le 15-05-2015 à 01:16:40   

Reply

Marsh Posté le 15-05-2015 à 13:36:38    

Citation :

Si j’enlève ("main.c" ) à la fin du programme il me renvoie TAILLE : 4199056


[n-ième edit, j'ai fini par comprendre...]
Si tu mets  

Code :
  1. printf("TAILLE : %ld\n", file_size);


tu n'appelles pas la fonction mais tu recois un pointeur vers cette fonction. Sauf que %ld c'est pas le bon format pour afficher ça et mingw se plaint:

Citation :


main.c|24|warning: format '%ld' expects argument of type 'long int', but argument 2 has type 'long int (*)(char *)' [-Wformat]


Bref, n'importe quoi, faut mettre des parenthèses et un argument correct.
 
Bon, pour le problème en soi chez moi (XP, mingw) ça compile et fonctionne très bien...
 
Si tu recois -1 en retour c'est probablement là

Code :
  1. if(file == NULL)
  2.    {
  3.       return -1;
  4.    }


que ça coince... Rajoute donc un perror("opening file: " ); et regarde ce que ça donne. http://en.cppreference.com/w/c/io/perror
 
edit: 4 096 octets c'est probablement pas la taille réelle mais la taille d'un secteur(?). Sous XP en faisant click droit sur un fichier et propriétés il y a deux infos, taille et taille sur le disque.


Message édité par rat de combat le 15-05-2015 à 13:43:47
Reply

Marsh Posté le 15-05-2015 à 13:52:26    

Au fait, il y a bien un fichier main.c dans ton projet? (et non main.cpp)
 
Quoi qu'il en soit, si tu veux calculer la taille d'un "fichier .txt nommé text" alors il faut indiquer "text.txt" comme argument (plutôt que "main.c"...)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed