ifstream:: Quelle est la taille de fichier maximale d'un ifstream peut lire

J'ai essayé de lire un 3GB fichier de données à l'aide de ifstream et il me donne le mal de la taille du fichier, alors que quand je lis un fichier de 600 mo, il me donne le résultat correct. En plus des mauvais fichier de taille, je suis aussi incapable de lire le fichier en entier à l'aide de ifstream.

Voici le code que j'ai utilisé

        std::wstring name;
        name.assign(fileName.begin(), fileName.end());
        __stat64 buf;
        if (_wstat64(name.c_str(), &buf) != 0)
            std::cout << -1; //error, could use errno to find out more

        std::cout << " Windows file size : " << buf.st_size << std::endl;;


        std::ifstream fs(fileName.c_str(), std::ifstream::in | std::ifstream::binary);
        fs.seekg(0, std::ios_base::end);

        std::cout << " ifstream  file size: " << fs.tellg() << std::endl;

La sortie de 3 go de fichier a été

 Windows file size : 3147046042
 ifstream  file size: -1147921254

Alors que la sortie pour le fichier de 600 MO a été

 Windows file size : 678761111
 ifstream  file size: 678761111

Juste au cas où, j'ai aussi testé pour 5 GO de fichiers et 300 MO de fichiers,

La sortie pour 5 GO de fichiers a été

Windows file size : 5430386900
 ifstream  file size: 1135419604

La sortie de 300MO fichier a été

Windows file size : 318763632
 ifstream  file size: 318763632

Il me semble qu'il atteint une certaine limite.

Je suis en train de tester le code à l'aide de Visual Studio 2010 sur une Machine Windows qui a beaucoup de mémoire et d'espace disque.

Je suis en train de lire des fichiers volumineux. Ce qui est un bon lecteur de flux à utiliser si ifstream ne peut pas lire des fichiers volumineux?

J'ai remarqué que vous êtes en invoquant _wstat64 directement. Êtes-vous une compilation de 32 bits binaires? Avez-vous essayé 64 bits binaires pour votre ifstream test?
Code 32 bits doit être capable de gérer des fichiers en excès de 2 GO si le système de fichiers n', si non c'est une assez mauvaise bug.
Je suis d'accord, j'étais seulement curieux de savoir si stat() (pas _wstat64()) se sont comportés de la même façon sur un 32bit mise en œuvre, et si ifstream comportés autrement sur un 64 bits de mise en œuvre.
La plate-forme que je suis la compilation est Win32. Je n'ai pas essayé 64 bits binaires.

OriginalL'auteur veda | 2013-05-01