Comment vérifier s’il n’y a pas de données dans le fichier à lire

std::fstream fin("emptyFile", std::fstream::in); std::cout << fin.eof() << std::endl; 

Ceci affiche 0 . Donc, en utilisant la fonction eof , je ne peux pas vérifier si le fichier est vide. Ou après avoir lu certaines données, je dois vérifier s’il n’y a plus de données.

Il y a deux façons de vérifier si vous pouvez “lire quelque chose” dans un fichier:

  1. Essayez de le lire, et si ça échoue, ça ne va pas … (ex. fin >> var; )
  2. Vérifiez la taille du fichier en utilisant fin.seekg(0, ios_base::end); suivi de size_t len = fin.tellg(); (puis retournez au début avec fin.seekg(0, ios_base::beg); )

Cependant, si vous essayez de lire un entier dans un fichier texte, la deuxième méthode risque de ne pas fonctionner: le fichier peut avoir une longueur de 2 Mo et ne pas contenir un seul entier, car il ne contient que des espaces, des lignes, etc.

Notez que fin.eof() vous indique s’il y a eu une tentative de lire AU-DELA de la fin du fichier.

eof() vous donne un résultat erroné car eofbit n’est pas encore défini. Si vous lisez quelque chose, vous passerez la fin du fichier et eofbit sera défini.

Evitez eof() et utilisez ce qui suit:

 std::streampos current = fin.tellg(); fin.seekg (0, fin.end); bool empty = !fin.tellg(); // true if empty file fin.seekg (current, fin.beg); //restore stream position