Nous allons créer une question complémentaire à ce un. Quel est le moyen le plus commun pour obtenir la taille du fichier en C++? Avant de répondre, assurez-vous qu'il est portable (peut être exécuté sur Unix, Mac et Windows), fiable, facile à comprendre et sans dépendances de la bibliothèque (pas de boost ou de qt, mais par exemple glib est ok car il est portable bibliothèque).
Réponses
Trop de publicités?#include <fstream>
std::ifstream::pos_type filesize(const char* filename)
{
std::ifstream in(filename, std::ifstream::ate | std::ifstream::binary);
return in.tellg();
}
Voir http://www.cplusplus.com/doc/tutorial/files/ pour plus d'informations sur les fichiers en C++.
Tout n'est pas nécessairement la méthode la plus populaire, j'ai entendu dire que le ftell, fseek méthode ne donne pas toujours des résultats précis dans certaines circonstances. Plus précisément, si un fichier est déjà ouvert utilisé et la taille doit être calculé et il arrive à être ouvert en tant que fichier texte, puis il va donner de mauvaises réponses.
Les méthodes suivantes doivent toujours comme stat est une partie de la bibliothèque runtime c sur Windows, Mac et Linux.
long GetFileSize(std::string filename)
{
struct stat stat_buf;
int rc = stat(filename.c_str(), &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
or
long FdGetFileSize(int fd)
{
struct stat stat_buf;
int rc = fstat(fd, &stat_buf);
return rc == 0 ? stat_buf.st_size : -1;
}
Sur certains systèmes, il existe également un stat64/fstat64. Donc, si vous avez besoin de cela pour les très gros fichiers, vous pouvez rechercher à l'aide de ceux-ci.