如何从 QFile 中读取?它显示该文件不可访问

Posted

技术标签:

【中文标题】如何从 QFile 中读取?它显示该文件不可访问【英文标题】:How to read from QFile? It shows that file not accessible 【发布时间】:2020-07-02 09:40:37 【问题描述】:

我一直在尝试使用 QFile 读取 .xml 文件。但是 qt creator 甚至找不到它,但是文件存在于项目中(我也尝试从另一个目录中读取它,而不是项目的,它也不起作用)。调试器说文件不可访问。

这是我的代码:

QFile file("../info.xml");
if (file.exists())
    if (file.open(QFile::ReadOnly | QFile::Text))
        qDebug(qPrintable("File exist"));

【问题讨论】:

问题是您的路径正在针对当前工作目录进行解析,而这不是您认为的那样。您可以提供绝对路径并使用它,也可以计算出当前工作目录的实际内容,并相应地调整路径。 @john 感谢您的回复。我之前尝试过使用完整路径,但结果相同 那肯定是某种访问/权限问题。 【参考方案1】:

这不是一个完整的答案,而是一个可能出错的列表。

检查文件路径:
    QFileInfo inf (file);
    qDebug() << inf.QFileInfo::path();

确保文件位于正确的目录中,即与您的 .exe (build-ProjectName-...) 相同。您可以使用QDir::currentPath() 进行检查

检查是哪个if 导致了问题:是第一个检查文件存在还是第二个无法打开?

我不确定将QFile::Text 用于.xml 文件是否是个好主意。

最后,我会做这样的事情:

QFile file("../info.xml");
QFileInfo inf (file);
qDebug() << "File path : "<< inf.QFileInfo::path() << Qt::endl;
qDebug() << "Current path : " << QDir::currentPath() << Qt::endl;
qDebug() << "Current path (expected) : " << QDir::currentPath() + "/info.xml" << Qt::endl;
if (file.exists())
    qDebug() << "exists" << Qt::endl;
    if (file.open(QFile::ReadOnly))qDebug() << "opened";
    

   

【讨论】:

感谢您的回复。我检查了文件路径,但它在 cmd 和“。”中显示“../”。如果我只使用“info.qml”。另外,我尝试使用完整路径,然后它显示路径,但文件仍然不起作用,调试器说“不可访问” 您是否尝试使用QFile file(QDir::currentPath() + "/info.xml"),然后将您的文件放入build-ProjectName-.../

以上是关于如何从 QFile 中读取?它显示该文件不可访问的主要内容,如果未能解决你的问题,请参考以下文章

19基本文件操作

qfile获取文件第一行

QT中怎样读取中文文本文件!

将 QFile 正确存储在集合中

QDataStream 读取和写入的字节数比 QFile::length() 报告的要多

如何在 Swing 中读取和显示大文本文件?