如何在c ++中检查文件是否存在于Qt中

如何检查文件是否存在于给定的path或不在Qt?

我目前的代码如下:

QFile Fout("/Users/Hans/Desktop/result.txt"); if(!Fout.exists()) { eh.handleError(8); } else { // ...... } 

但是,当我运行代码时,即使我在path中提到的文件不存在,也不会在handleError指定错误消息。

我将使用QFileInfo类( 文档 ) – 这正是它所做的:

QFileInfo类提供了与系统无关的文件信息。

QFileInfo提供有关文件系统中文件名称和位置(path),其访问权限以及是目录还是符号链接等信息。文件大小和上次修改/读取时间也是可用的。 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; } } 

还要考虑:你只想检查path是否存在( exists() ),还是要确保这是一个文件而不是目录( isFile() )?


TL; DR (使用上述function的较短版本,保存几行代码)

 #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(); } 

你发布的代码是正确的。 有可能是别的是错的。

尝试把这个:

 qDebug() << "Function is being called."; 

在你的handleError函数里面。 如果上面的消息打印,你知道别的是这个问题。

这就是我如何检查数据库是否存在:

 #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很难检查数据库是否存在,因为如果它不存在,它会自动创build一个新的数据库。

你可以使用QFileInfo::exists()方法:

 #include <QFileInfo> if(QFileInfo("C:\\exampleFile.txt").exists()){ //The file exists } else{ //The file doesn't exist } 

我会跳过使用Qt中的任何东西,只使用旧的标准access

 if (0==access("/Users/Hans/Desktop/result.txt", 0)) // it exists else // it doesn't exist