Taille de fichier

gwenChina Messages postés 13 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 27 août 2005 - 8 juin 2005 à 05:19
castelj Messages postés 10 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 9 juin 2005 - 10 juin 2005 à 16:08
Bonjour a tous,

Je lis un fichier a l'aide de la fonction fopen().
Est-il possible de connaitre la taille du fichier que l'on ouvre afin de la stocker??

Merci d'avance,

GwenChina

11 réponses

darfeuille Messages postés 63 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 juillet 2005
8 juin 2005 à 08:33
Il n'y a pas d'attribut ou de méthode directe, mais tu peux faire ca :

long GetFileSize( std::ifstream & Fichier )
{
long pos = Fichier.tellg();
Fichier.seekg( 0 , std::ios_base::end );
long size = Fichier.tellg() ;
Fichier.seekg( pos, std::ios_base::beg ) ;
return size ;
}

(pos sert juste a se replacer en debut de fichier a la fin)
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
8 juin 2005 à 08:48
Bonsoir,



en c :



size_t filesize(FILE *fp)

{

size_t taille;



fseek(fp, 0, SEEK_END);

taille = ftell(fp);

fseek(fp, 0, SEEK_SET);



return taille;

}



Probleme : Si tu as déja lu dans le fichier et que tu appelles
la fonction ensuite alors au retour de la fonction, tu te retrouves en
début de fichier.

Remede : Tu peux faire un ftell en début de fonction et puis dans le denier fseek, au lieu de mettre 0 tu mets la valeur recupéré par ce ftell.

Matt...
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
8 juin 2005 à 09:58
+2(p - n)
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
8 juin 2005 à 09:59
Tiens, ca n'a pas marché.
Je disais que tu pouvais utiliser l'API GetFileSize() (si tu es sous windows) mais que ceci t'obliger a utiliser CreateFile() etc...

+2(p - n)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
8 juin 2005 à 10:00
"t'obligeait"... pardon.
(Au bout de 3 posts, j'y suis arrivé ;))

+2(p - n)
0
castelj Messages postés 10 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 9 juin 2005
8 juin 2005 à 13:54
Tu as la fonction stat(path, struct stat) qui permet de recuperer dans une structure les attributs du fichier comme la taille, la date de modification.

int stat(char *path, struct stat *buffer);

Tu n'as pas besoin d'ouvrir le fichier.

J'espère que ça va t'aider
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
8 juin 2005 à 20:28
Bonsoir,



Il me semble que stat n'est pas portable...

Matt...
0
gwenChina Messages postés 13 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 27 août 2005
9 juin 2005 à 06:18
Merci a tous,

En fait je programme en C, donc le code de Matt67 marche bien.

A bientot

GwenChina
0
castelj Messages postés 10 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 9 juin 2005
9 juin 2005 à 09:38
Ola

J'ai testé sous Linux et Windows. La fonction stat tourne sur les deux systèmes.

Voili le code mais bon si avec l'autre ça marche, c parfait

ps : si tu peux me dire en quoi elle n'est pas portable, ça m'intéresse, je m'en sers souvent

Merci

#include <stdio.h>
#include <sys/stat.h>


int main(){
struct stat stat_info;
char nom_fichier[32000];


sprintf(nom_fichier,"%s","c:\\version.txt");


if(stat(nom_fichier,&stat_info)){
perror("Erreur ");
fprintf(stdout,"Erreur de stat sur %s\n",nom_fichier);
return(1);
}


fprintf(stdout,"Taille du fichier %s : %lu\n",nom_fichier,stat_info.st_size);


return(0);
}
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
9 juin 2005 à 21:46
Bonsoir,



<sys/stat.h> ne fait pas parti de la bibliotheque standard C99, donc...

Matt...
0
castelj Messages postés 10 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 9 juin 2005
10 juin 2005 à 16:08
Bonjour,

Effectivement c'est une bonne raison
Merci pour le renseignement

castelj
0
Rejoignez-nous