如何在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