如何从 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 中读取?它显示该文件不可访问的主要内容,如果未能解决你的问题,请参考以下文章