Подтвердить что ты не робот

Как проверить, существует ли файл в Qt в С++

Как проверить, существует ли файл в указанном пути или нет в Qt?

Мой текущий код ниже:

QFile Fout("/Users/Hans/Desktop/result.txt");

if(!Fout.exists()) 
{       
  eh.handleError(8);
}  
else
{
  // ......
}

Но когда я запускаю код, он не дает сообщение об ошибке, указанное в handleError, даже если файл, упомянутый в пути, не существует.

4b9b3361

Ответ 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