Taille de fichier

Signaler
Messages postés
13
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
27 août 2005
-
Messages postés
10
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
9 juin 2005
-
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

Messages postés
63
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
25 juillet 2005

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)
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

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...
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
+2(p - n)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
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)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
"t'obligeait"... pardon.
(Au bout de 3 posts, j'y suis arrivé ;))

+2(p - n)
Messages postés
10
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
9 juin 2005

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
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,



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

Matt...
Messages postés
13
Date d'inscription
vendredi 29 avril 2005
Statut
Membre
Dernière intervention
27 août 2005

Merci a tous,

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

A bientot

GwenChina
Messages postés
10
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
9 juin 2005

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);
}
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,



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

Matt...
Messages postés
10
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
9 juin 2005

Bonjour,

Effectivement c'est une bonne raison
Merci pour le renseignement

castelj