Était-ce utile?

La solution

Peut-être quelque chose qui ressemble à:

bool is_empty(std::ifstream& pFile)
{
    return pFile.peek() == std::ifstream::traits_type::eof();
}

court et doux.


Avec les préoccupations de votre erreur, les autres réponses utilisent l'accès aux fichiers de style C, où vous obtenez un FILE* avec des fonctions spécifiques.

Au contraire, vous et moi travaillons avec les flux C de, et en tant que telle ne peut pas utiliser ces fonctions. Le code ci-dessus fonctionne de manière simple: peek() va jeter un regard sur le flux et le retour, sans enlever le caractère suivant. Si elle atteint la fin du fichier, il retourne eof(). Ergo, nous venons de peek() au cours d'eau et voir si elle est eof(), depuis un fichier vide n'a rien à jeter un regard à.

Remarque, cela renvoie également vrai si le fichier n'a jamais ouvert en premier lieu, qui devrait fonctionner dans votre cas. Si vous ne voulez pas que:

std::ifstream file("filename");

if (!file)
{
    // file is not open
}

if (is_empty(file))
{
    // file is empty
}

// file is open and not empty

Autres conseils

Ok, donc ce morceau de code devrait fonctionner pour vous. J'ai changé les noms pour correspondre à votre paramètre.

inFile.seekg(0, ios::end);  
if (inFile.tellg() == 0) {    
  // ...do something with empty file...  
}

Chercher à la fin du fichier et vérifier la position:

 fseek(fileDescriptor, 0, SEEK_END);
 if (ftell(fileDescriptor) == 0) {
     // file is empty...
 } else {
     // file is not empty, go back to the beginning:
     fseek(fileDescriptor, 0, SEEK_SET);
 }

Si vous ne possédez pas le fichier déjà ouvert, il suffit d'utiliser la fonction fstat et vérifier la taille du fichier directement.

char ch;
FILE *f = fopen("file.txt", "r");

if(fscanf(f,"%c",&ch)==EOF)
{
    printf("File is Empty");
}
fclose(f);

utilisez ceci: data.peek ()! = '\ 0'

Je cherchais depuis une heure jusqu'à ce que cela a aidé finaly!

pFile = fopen("file", "r");
fseek (pFile, 0, SEEK_END);
size=ftell (pFile);
if (size) {
  fseek(pFile, 0, SEEK_SET);
  do something...
}

fclose(pFile)

Que diriez-vous (pas de façon élégante mais)

int main( int argc, char* argv[] )
{
    std::ifstream file;
    file.open("example.txt");

    bool isEmpty(true);
    std::string line;

    while( file >> line ) 
        isEmpty = false;

        std::cout << isEmpty << std::endl;
}
if (nfile.eof()) // Prompt data from the Priming read:
    nfile >> CODE >> QTY >> PRICE;
else
{
    /*used to check that the file is not empty*/
    ofile << "empty file!!" << endl;
    return 1;
}
scroll top