Maison >développement back-end >C++ >Pourquoi tellg() signale-t-il des tailles de fichiers incohérentes et comment puis-je déterminer avec précision la taille des fichiers ?
Fonction tellg() signalant une taille de fichier incohérente
Lors d'une tentative de lecture d'un fichier dans un tampon, les utilisateurs peuvent rencontrer des résultats incorrects lors de l'utilisation la fonction tellg(). Contrairement aux attentes, tellg() rapporte une valeur de jeton au lieu de la taille réelle du fichier ou du décalage d'octets. Cet écart peut être attribué à l'objectif prévu de la fonction.
Techniquement, tellg() n'indique pas directement la taille du fichier ou sa position précise en octets. Au lieu de cela, il fournit un jeton qui permet au programme de revisiter le même emplacement dans le fichier. Il n'est pas garanti que la valeur du jeton soit convertible en un type de données intégral.
Dans les systèmes basés sur Unix, tellg() représente généralement le décalage d'octets depuis le début du fichier. Sur les systèmes Windows, cependant, son comportement diffère en fonction du mode d'ouverture du fichier. Pour les fichiers binaires, le décalage ressemble au comportement Unix. Cependant, en mode texte, il n'y a pas de corrélation directe entre la sortie de tellg() et le nombre réel d'octets requis pour atteindre une position donnée.
Pour déterminer avec précision le nombre d'octets lisibles dans un fichier, le L’approche la plus fiable consiste à tenter le processus de lecture. Ceci peut être réalisé en suivant les étapes suivantes :
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 );
Ici, ignorer est utilisé pour lire jusqu'à la fin du fichier. La valeur de gcount() fournit alors le nombre réel d'octets.
Notes supplémentaires :
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!