Taille fichier sous linux

Résolu
bigbourin Messages postés 64 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 18 août 2006 - 8 avril 2006 à 23:42
awolf75 Messages postés 1 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 14 mars 2007 - 14 mars 2007 à 15:05
Bonjour a tous, voila je cherche une fonction pour récupéré la taille d'un fichier mais sous linux. donc les API W32 ...voila. Je pensait trouver mon bonheur dans les vieux post mais apparement tout est avec les API W32.Merci d'avance pour vos reponces.

ps : j'utilise gcc sur une distro Debian et une archi i386

7 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
9 avril 2006 à 01:38
Meuh non, place toi à la fin du fichier avec fseek
regarde ce que donne ftell
et retourne au début avec fseek toujours

Made in C
if(!Meilleur("Joky")) return ERREUR;<
3
Bel0 Messages postés 71 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 14 septembre 2007
10 avril 2006 à 12:01
BigBourin: tu dois avoir commis une erreur parce que cette méthode fonctionne très bien.

Joky: ca n'est pas la meilleure façon de procéder. Il se peut très bien que les permissions mises sur le système de fichier permettent de lister le contenu d'un dossier (permission en lecture sur le dossier) mais ne permettent pas d'ouvrir le fichier en lecture. Or ta méthode nécessite absolumenent de savoir ouvrir le fichier en lecture ... tu risques donc d'avoir une erreur alors qu'il est possible de lire la taille du fichier.
Pour en revenir à ta méthode. A ton avis que fait la librairie standard C quand tu lui demandes de faire un fseek à la fin du fichier ... elle va chercher les informations concernant le fichier (sans doute en utilisant stat ou fstat puisque le fichier est déjà ouvert) et avance le pointeur de lecture jusqu'à la fin. Mais pourquoi ouvrir le fichier pour avoir l'information sur la taille alors que celle-ci est directement disponible à partir de stat.

Pour confirmer ce que je dis, jettes donc un coup d'oeil à la source fseek de netbsd: http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fseeko.c, tu verras un fstat au milieu du fichier.
3
Bel0 Messages postés 71 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 14 septembre 2007
9 avril 2006 à 00:05
Une manière de procéder est d'utiliser stat()

struct stat info;
if(stat(file_name, &info) == -1)
// deal with errors

printf("file size: %d", st.st_size);

"man stat" pour plus de détail
0
bigbourin Messages postés 64 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 18 août 2006
9 avril 2006 à 01:50
J'ais testé ta methode Bel0, sa a pas l'aire fameux, stat() renvoi pas d'erreur mais dans info.st_size j'ais 0.pas tres pratique.

joky je vais tester ta solution et je vous donne des nouvelles ^^
0

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

Posez votre question
bigbourin Messages postés 64 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 18 août 2006
11 avril 2006 à 02:05
Merci pour vos réponce mais comme j'ouvre le fichier de toute facon c'est plus simple d'utiliser fseek et ftell. j'ais résolu mon problemme, merci bcp ^^
0
ZedMaTrix Messages postés 178 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 14 août 2008
16 juil. 2006 à 04:58
Et bien moi je vais me servire de ta méthode Bel0 !

Merci beaucoup

ZedMaTriX
0
awolf75 Messages postés 1 Date d'inscription mercredi 14 mars 2007 Statut Membre Dernière intervention 14 mars 2007
14 mars 2007 à 15:05
j'ai une question qui va dans le sens, comment recuperer la taille d'un fichier qui fait plus de 4 Go le ftell me donne 4 294 967 295 quelque soit la taille du fichier abec un fopen64, et pour le fopen n'en parlont pas il n'ouvre meme pas le fichier???
0
Rejoignez-nous