Maison >développement back-end >C++ >Comment puis-je déterminer avec précision la taille d'un fichier en C au lieu d'utiliser « tellg() » ?

Comment puis-je déterminer avec précision la taille d'un fichier en C au lieu d'utiliser « tellg() » ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-16 11:02:14991parcourir

How Can I Accurately Determine a File's Size in C   Instead of Using `tellg()`?

Fonction tellg() et dimensionnement des fichiers

tellg() est une fonction en C utilisée pour récupérer la position actuelle dans un fichier. Cependant, il est important de noter que tellg() ne fournit pas la taille réelle du fichier en octets. Au lieu de cela, il renvoie une valeur de jeton qui peut être utilisée plus tard pour revenir à la même position.

Dans le code fourni, il semble y avoir un malentendu concernant le comportement attendu de tellg(). Le code utilise tellg() pour déterminer la taille du fichier, qui est ensuite utilisée pour allouer un tampon pour contenir le contenu du fichier. Cependant, tellg() ne doit pas être utilisé à cette fin.

Selon la spécification du langage C, tellg() renvoie une valeur de jeton spécifique à l'implémentation. Bien qu'il corresponde souvent au byte offset dans les systèmes Unix, ce comportement n'est pas garanti sous Windows. En mode texte, Windows peut renvoyer une valeur supérieure au nombre réel d'octets nécessaires pour atteindre la position actuelle.

Pour déterminer avec précision la taille d'un fichier, il est recommandé d'utiliser des méthodes alternatives, telles que :

#include <limits>

...

file.ignore(std::numeric_limits<std::streamsize>::max());
std::streamsize length = file.gcount(); // Retrieve the size of the file in bytes
file.clear(); // Reset the file stream
file.seekg(0, std::ios_base::beg); // Return to the beginning of the file

De plus, il y a plusieurs problèmes dans le code fourni :

  • *buffer = new char[length]; doit être corrigé en buffer = new char[length];.
  • L'utilisation de int pour la taille est inappropriée ; std::streamsize doit être utilisé à la place.
  • La gestion des erreurs n'est pas fournie en cas d'échec de l'ouverture du fichier.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn