(TL; DR unten)
Ich würde die QFileInfo
-class ( docs ) verwenden - genau dafür ist es gemacht:
Die QFileInfo-Klasse bietet systemunabhängige Dateiinformationen.
QFileInfo bietet Informationen über den Namen und die Position (den Pfad) einer Datei im Dateisystem, ihre Zugriffsrechte und darüber, ob es sich um ein Verzeichnis oder einen symbolischen Link usw. handelt. Die Größe der Datei und die letzten Änderungs- / Lesezeiten sind ebenfalls verfügbar. QFileInfo kann auch verwendet werden, um Informationen zu einer Qt-Ressource abzurufen.
Dies ist der Quellcode, um zu überprüfen, ob eine Datei vorhanden ist:
#include <QFileInfo>
(Vergessen Sie nicht, die entsprechende #include
Anweisung hinzuzufügen)
bool fileExists(QString path) {
QFileInfo check_file(path);
if (check_file.exists() && check_file.isFile()) {
return true;
} else {
return false;
}
}
Beachten Sie auch: Möchten Sie nur überprüfen, ob der Pfad vorhanden ist ( exists()
), oder möchten Sie auch sicherstellen, dass dies eine Datei und kein Verzeichnis ist ( isFile()
)?
Seien Sie vorsichtig : Die Dokumentation der Funktion exists()
lautet:
Gibt true zurück, wenn die Datei vorhanden ist. Andernfalls wird false zurückgegeben.
Hinweis: Wenn die Datei ein Symlink ist, der auf eine nicht vorhandene Datei verweist, wird false zurückgegeben.
Das ist nicht genau. Es sollte sein:
Gibt true zurück, wenn der Pfad (dh Datei oder Verzeichnis) vorhanden ist. Andernfalls wird false zurückgegeben.
TL; DR
(mit einer kürzeren Version der obigen Funktion, die einige Codezeilen spart)
#include <QFileInfo>
bool fileExists(QString path) {
QFileInfo check_file(path);
return check_file.exists() && check_file.isFile();
}
TL; DR für Qt> = 5,2
(Verwenden exists
als als, static
was in Qt 5.2 eingeführt wurde; die Dokumente sagen, dass die statische Funktion schneller ist, obwohl ich nicht sicher bin, ob dies immer noch der Fall ist, wenn auch die isFile()
Methode verwendet wird; zumindest ist dies dann ein Einzeiler)
#include <QFileInfo>
bool fileExists = QFileInfo::exists(path) && QFileInfo(path).isFile();