Maison >développement back-end >C++ >Pourquoi `tellg()` ne rapporte-t-il pas avec précision la taille du fichier en C ?
Idée fausse tellg() : rapporter la taille du fichier
Dans votre extrait de code, vous avez rencontré un problème où la fonction tellg() renvoyait une valeur plus grand que la taille réelle du fichier lu par la fonction read(). Cette divergence perçue résulte d'une mauvaise compréhension du but de tellg().
Fonction de Tellg
Contrairement à la croyance populaire, tellg() ne fournit pas la taille du fichier ou le décalage depuis le début en octets. Au lieu de cela, il renvoie une valeur de jeton, un espace réservé qui peut être utilisé ultérieurement pour revenir à la même position dans le fichier. Le nombre réel renvoyé peut varier en fonction du système d'exploitation et du mode de fichier.
Implémentations pratiques
En pratique, sur les systèmes Unix, tellg() renvoie le décalage en octets , tandis que sous Windows, il renvoie le décalage uniquement pour les fichiers ouverts en mode binaire. Pour le mode texte sous Windows, la valeur renvoyée peut ne pas refléter avec précision le nombre d'octets requis pour atteindre cette position.
Comptage précis des octets
Pour déterminer avec précision le nombre de octets pouvant être lus, la seule méthode fiable consiste à effectuer une opération de lecture. Ceci peut être réalisé en utilisant une technique comme la suivante :
#include <limits> file.ignore( std::numeric_limits<std::streamsize>::max() ); std::streamsize length = file.gcount(); file.clear(); // Since ignore will have set eof. file.seekg( 0, std::ios_base::beg );
Autres observations
Outre le problème tellg(), votre code contient des erreurs supplémentaires :
En résolvant ces problèmes, votre code peut déterminer avec précision la taille du fichier. et effectuez les opérations de lecture comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!