récupérer la taille d'un fichier en C

récupérer la taille d'un fichier en C - Programmation

Marsh Posté le 12-03-2001 à 00:39:18    

je suis en train de faire un petit compresseur et je voudrais améliorer un peu mon code, vu qu'il faut forcément parcourir le fichier source, pour l'instant j'incrémente un compteur à chaque avancée dans la lecture, mais j'aimerais pouvoir me passer de cet artifice, alors comment récupérer directement la taille d'un fichier en C?

Reply

Marsh Posté le 12-03-2001 à 00:39:18   

Reply

Marsh Posté le 12-03-2001 à 01:29:48    

j'ai pas bien en tete le nom des fonctions mais il faut se positionner à la fin du fichier (fseek) et regarder à quel endroit du fichier on est.

Reply

Marsh Posté le 12-03-2001 à 09:43:39    

fd=fopen("fichier","r" );
//toutes tes vérifications
fseek(0,SEEK_END);
unsigned long int = ftell(fd);
 
//c'est fini ici :D

Reply

Marsh Posté le 12-03-2001 à 10:43:02    

il y a aussi les fonctions de API windows (si tu es sous windows bien sur).
 
);
 
GetFileInformationByHandle
 
http://msdn.microsoft.com/library/ [...] o_2jtx.htm

Reply

Marsh Posté le 12-03-2001 à 15:14:20    

Sous linux il y a stat et fstat qui remplisse une structure avec des info sur le fichier.
Mais j'ai plus le header et la syntaxe en tête.


---------------
http://www.cheata.net le site qui vous donne la banane!
Reply

Marsh Posté le 12-03-2001 à 16:04:10    

thanks
je suis sous linux, je m'en vais de ce pas tester tout ça !!!!

Reply

Marsh Posté le 13-03-2001 à 00:15:18    

Oui, stat, c'est la maniere classique.
Parce que bon, fd=fopen("fichier","r" ); ouvrir (et lire?) le fichier juste pour savoir sa taille, c'est pas trop optimal.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-03-2001 à 03:29:24    

Je te le fé sous forme de fonction pour que ce soit plus claire :  
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
 
long file_size(const char *filename)
{
   struct stat s;
 
   if  (stat(filename,&s) != 0) {
      printf("error!\n" );
      return 0;
   }
 
   return s.st_size;
}
 
C'est pas la méthode propre, te reste plus qu'a adapter.

Reply

Marsh Posté le 13-03-2001 à 08:00:07    

gilou a écrit a écrit :

Oui, stat, c'est la maniere classique.
Parce que bon, fd=fopen("fichier","r" ); ouvrir (et lire?) le fichier juste pour savoir sa taille, c'est pas trop optimal.
A+,




 
C'est une méthode générique qui passe sous tous les OS, il a dit qu'il cherchait à optimiser qqchose ???

Reply

Marsh Posté le 13-03-2001 à 08:44:49    

>C'est une méthode générique qui passe sous tous les OS
 
Ta methode marche pas si tu as pas le droit en lecture sur le fichier. stat marche a partir du moment ou tu as le droit d'acces sur le repertoire il me semble.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 13-03-2001 à 08:44:49   

Reply

Marsh Posté le 13-03-2001 à 08:56:08    

Le code de KarlKox s'ecrirait sous windows:
(la difference essentielle: stat prend un underscore, et l'inclusion de types.h avant stat.h est necessaire).
 
#include <stdio.h>  
#include <stdlib.h>
#include <sys/types.h>  
#include <sys/stat.h>  
 
long file_size(const char *filename)  
{  
   struct _stat s;  
 
   if  (_stat(filename,&s) != 0) {  
      printf("error!\n" );  
      return 0;  
   }  
 
   return s.st_size;  
}  
 
Si ton prog travaille en unicode natif interne, il y a _wstat,
(qui attends alors le nom de fichier en  wchar_t* et non plus en char*) ainsi que _stati64 et _wstati64 si tu bosses en 64 bits...
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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