2017-09-19 1 views
-1

Ich möchte überprüfen, ob eine Datei vorhanden ist, und versucht, die folgende Funktionprüfen Datei Existenz in C++ ohne Datei erstellen

#include <fstream> 

bool DoesFileExist(const std::string& filename) { 
    std::ifstream ifile(filename.c_str()); 
    return (bool)ifile; 
    } 

jedoch zu verwenden, es scheint nicht richtig zu funktionieren, denn anstatt die Existenz des Prüfens Eine Datei wird erstellt! Was ist das Problem hier?

Bitte beachte, dass ich gezwungen ist, C++ 98-Standard verwenden und nicht #include <sys/stat.h> oder #include <unistd.h> wie in der akzeptierten Antwort vorgeschlagen verwenden kann here.

+1

Wenn möglich, lernen C++ 11; C + 98 ist wirklich veraltet. Und lesen Sie die Dokumentation von [std :: ifstream] (http://en.cppreference.com/w/cpp/io/basic_ifstream) sorgfältig durch. Veröffentlichen Sie auch einige [MCVE] (https://stackoverflow.com/help/mcve). Ihr angezeigter Code verhält sich wahrscheinlich nicht wie Sie sagen –

+1

Hat [diese Antwort] (https://stackoverflow.com/a/6297560/4143855) nicht geholfen? 'std :: fstream ifile (Dateiname.c_str(), ios_base :: out | ios_base :: in);' – Tas

+0

Nicht reproduzierbar https://ideone.com/Z4c2EW –

Antwort

2

Sie können entweder diese Funktionen verwenden, um zu sehen, ob eine Datei

existiert
bool DoesFileExist (const std::string& name) { 
    ifstream f(name.c_str()); 
    return f.good(); 
} 

oder

bool DoesFileExist (const std::string& name) { 
    if (FILE *file = fopen(name.c_str(), "r")) { 
     fclose(file); 
     return true; 
    } else { 
     return false; 
    } 
} 

oder

bool DoesFileExist (const std::string& name) { 
    return (access(name.c_str(), F_OK) != -1); 
} 

oder

bool DoesFileExist (const std::string& name) { 
    struct stat buffer; 
    return (stat (name.c_str(), &buffer) == 0); 
} 
+1

Gut für die Verwendung von 'fopen() '. Leider kann 'std :: ifstream' eine Datei gültig _create_ erstellen. –

Verwandte Themen