(TL; DR внизу)
Я б використав QFileInfo
-class ( docs ) - саме для цього він створений:
Клас QFileInfo забезпечує незалежну від системи інформацію про файли.
QFileInfo надає інформацію про ім'я та позицію файлу (шлях) у файловій системі, його права доступу, а також про те, чи це каталог або символічне посилання тощо. Також доступні розмір файлу та час останньої зміни / читання. QFileInfo також може використовуватися для отримання інформації про ресурс Qt.
Це вихідний код, щоб перевірити, чи існує файл:
#include <QFileInfo>
(не забудьте додати відповідну #include
заяву)
bool fileExists(QString path) {
QFileInfo check_file(path);
if (check_file.exists() && check_file.isFile()) {
return true;
} else {
return false;
}
}
Також враховуйте: Ви хочете лише перевірити, чи існує шлях ( exists()
), або Ви також хочете переконатися, що це файл, а не каталог ( isFile()
)?
Будьте обережні : У документації до функції exists()
зазначено:
Повертає true, якщо файл існує; інакше повертає false.
Примітка: Якщо файл є символічним посиланням, яке вказує на неіснуючий файл, повертається значення false.
Це не точно. Вона повинна бути:
Повертає true, якщо шлях (тобто файл чи каталог) існує; інакше повертає false.
TL; DR
(із коротшою версією функції вище, зберігаючи кілька рядків коду)
#include <QFileInfo>
bool fileExists(QString path) {
QFileInfo check_file(path);
return check_file.exists() && check_file.isFile();
}
TL; DR для Qt> = 5,2
(використовуючи exists
як a, static
який було введено в Qt 5.2; у документах сказано, що статична функція швидша, хоча я не впевнений, що це все ще має місце при використанні isFile()
методу; принаймні, це однокласний вкладиш)
#include <QFileInfo>
bool fileExists = QFileInfo::exists(path) && QFileInfo(path).isFile();