Как проверить, существует ли файл в Qt в С++
Как проверить, существует ли файл в указанном пути или нет в Qt?
Мой текущий код ниже:
QFile Fout("/Users/Hans/Desktop/result.txt");
if(!Fout.exists())
{
eh.handleError(8);
}
else
{
// ......
}
Но когда я запускаю код, он не дает сообщение об ошибке, указанное в handleError
, даже если файл, упомянутый в пути, не существует.
Ответы
Ответ 1
Я бы использовал QFileInfo
-класс (docs) - это именно то, для чего он сделан:
Класс QFileInfo предоставляет системно-независимую информацию о файле.
QFileInfo предоставляет информацию о имени файла и позиции (пути) в файловой системе, ее правах доступа и является ли это папкой или символическая ссылка и т.д. Размер файла и последнее изменение/время чтения так же доступно. QFileInfo также может использоваться для получения информации о ресурс Qt.
Это исходный код для проверки наличия файла:
#include <QFileInfo>
(не забудьте добавить соответствующее #include
-statement)
bool fileExists(QString path) {
QFileInfo check_file(path);
// check if file exists and if yes: Is it really a file and no directory?
if (check_file.exists() && check_file.isFile()) {
return true;
} else {
return false;
}
}
Также подумайте: вы хотите только проверить, существует ли путь (exists()
), или вы хотите также убедиться, что это файл, а не каталог (isFile()
)?
TL; DR (с более короткой версией функции выше, сохраняя несколько строк кода)
#include <QFileInfo>
bool fileExists(QString path) {
QFileInfo check_file(path);
// check if file exists and if yes: Is it really a file and no directory?
return check_file.exists() && check_file.isFile();
}
Ответ 2
Код, который вы опубликовали, верен. Скорее всего, что-то еще не так.
Попробуйте поставить это:
qDebug() << "Function is being called.";
внутри вашей функции handleError. Если вышеприведенное сообщение печатается, вы знаете, что еще проблема.
Ответ 3
Как проверить, существует ли база данных:
#include <QtSql>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QFileInfo>
QString db_path = "/home/serge/Projects/sqlite/users_admin.db";
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(db_path);
if (QFileInfo::exists(db_path))
{
bool ok = db.open();
if(ok)
{
qDebug() << "Connected to the Database !";
db.close();
}
}
else
{
qDebug() << "Database doesn't exists !";
}
С SQLite
сложно проверить, существует ли база данных, потому что она автоматически создает новую базу данных, если она не существует.
Ответ 4
Вы можете использовать метод QFileInfo::exists()
:
#include <QFileInfo>
if(QFileInfo("C:\\exampleFile.txt").exists()){
//The file exists
}
else{
//The file doesn't exist
}
Ответ 5
Я вообще пропустил бы что-нибудь из Qt и просто использовал бы старый стандарт access
:
if (0==access("/Users/Hans/Desktop/result.txt", 0))
// it exists
else
// it doesn't exist