QFileInfo exists()和isFile()错误

时间:2014-05-29 10:04:37

标签: c++ qt file qfile

我试图检查提供的路径是否存在以及它是否是文件 所以我写了这段代码:

#include <QFile>
#include <QFileInfo>


bool Tool::checkPath(const QString &path){
    QFileInfo fileInfo(QFile(path));
    return (fileInfo.exists() && fileInfo.isFile());
}

我遇到以下编译器错误:

Error: request for member 'exists' in 'fileInfo', which is of non-class type 'QFileInfo(QFile)'

Error: request for member 'isFile' in 'fileInfo', which is of non-class type 'QFileInfo(QFile)'

为什么?我一遍又一遍地阅读文档,但我无法理解。 BTW Qt Creator建议我使用这些方法并完成它们。但是编译器并不喜欢它。

3 个答案:

答案 0 :(得分:9)

似乎vexing parse: 编译器认为

QFileInfo fileInfo(QFile(path));

是一个像QFileInfo fileInfo(QFile path);

这样的函数定义

请改用:

QFile ff(file);
QFileInfo fileInfo(ff);
bool test = (fileInfo.exists() && fileInfo.isFile());

答案 1 :(得分:0)

您可以直接使用

QFileInfo fileInfo(path)
bool test = fileInfo.exists() && fileInfo.isFile()

答案 2 :(得分:0)

由于我的声誉很低,我无法发表评论,然后在这里我提出一些关于QFileInfo的文章:

QFileInfo fileInfo("./.py");
bool test = fileInfo.exists() && fileInfo.isFile();

该示例将失败!

我在检查中添加了baseName()值:

bool test = fileInfo.exists() && fileInfo.isFile() && !fileInfo.baseName().isEmpty();