151 votes

Comment puis-je obtenir un taille du fichier en C++?

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).

163voto

Spyros Points 13741
#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++.

101voto

Matt Points 8168

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.

29voto

Andrej Bratoz Points 1439

Il est également possible de le trouver à l'aide de la fopen(),fseek() et ftell() fonction.

int get_file_size(std::string filename) // path to file
{
    FILE *p_file = NULL;
    p_file = fopen(filename.c_str(),"rb");
    fseek(p_file,0,SEEK_END);
    int size = ftell(p_file);
    fclose(p_file);
    return size;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X