Bonsoir, je suis embetté j'aimerai retourner la taille d'un fichier mais je n'ai aucune idée de la bonne fonction j'avais pensé à un sizeof(*fichier) mais ça retourne toujours la meme taille 4.
Si vous avez une idée à me proposer merci !!
Bonsoir, je suis embetté j'aimerai retourner la taille d'un fichier mais je n'ai aucune idée de la bonne fonction j'avais pensé à un sizeof(*fichier) mais ça retourne toujours la meme taille 4.
Si vous avez une idée à me proposer merci !!
« sizeof() » fait partie du langage C et est calculé par le compilateur. Si « fichier » est de type « FILE * » et que tu fais sizeof(fichier), tu obtiens la taille d'un pointeur. Donc 4, sur une machine 32 bits.
La taille du contenu d'un fichier, tu ne peux la connaître qu'à l'exécution et un fichier est un objet créé par le système d'exploitation. Il faut donc appeler une fonction de ce système pour lui demander de retrouver cette taille pour toi. C'est aussi pour cela que ce n'est pas portable, car cela dépend de l'OS que tu utilises.
- Sous Windows, regardes du côté de GetFileSize() ;
- Sous unixoïdes et systèmes compatibles POSIX 2001, utilises stat().
Bonjour,
Pour les shaders ( graphisme ), nous utilisons une autre méthode qui est:
Ouverture du fichier ( bien sur )
On place le curseur du fichier à la fin avec fseek(file, 0, SEEK_END)
On récupère la position du curseur ftell() qui sera la taille du fichier car nous sommes à la fin
On replace le curseur à la place d'origine.
Fermture du fichier (à ne pas oublier)
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Désolé, mais on a déjà dit pourquoi c'est une méthode à proscrire. En particulier :
- fseek() utilise bien une méthode pour connaître l'emplacement de la fin du fichier. Autant l'utiliser directement ;
- Si ton fichier est sur une bande plutôt qu'un disque dur, atteindre la fin risque de prendre un certain temps ;
- Il n'est pas toujours possible d'ouvrir le fichier.
Ceci est un non-argument dès que la portabilité rentre en jeu.
Donc, la question à boubz013 est: Veux-tu un code standard ou un code spécialisé potentiellement plus performant?
PS: Windows supporte stat() tout comme POSIX, mais les versions récentes de Visual gueulent si tu ne l'appelles pas _stat() à la place (#define CRT_NONSTDC_NO_DEPRECATE est ton ami).
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
C'est ce que je précise dans mes deux commentaires.
Cependant, des systèmes actuels qui ne gèrent ni stat(), ni GetFileSize() de Windows, il n'en reste plus beaucoup. Et dans tout les cas, je maintiens qu'il est toujours plus sage de trouver la fonction qui le fait sur un système cible.
C'est vrai que même EPITA, qui a une des APIs les plus réduites que je connaisse, supporte sans doute stat(). Et pas fseek().
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager