如何修复QFile打开错误(未知错误),即使文件存在

How to fix QFile open error (unknown error) even though the file exists?

本文关键字:错误 存在 文件 QFile 何修复 未知      更新时间:2023-10-16

我正试图使用QFile接口打开并读取map.dat文件,但它不会打开该文件,即使该文件确实存在于目录中。

  • 我在C++中尝试过fopenifstream,但他们一直告诉我该文件不存在,即使我已将其添加到资源文件夹(.qrc)中。然后我转到QFile接口,问题仍然存在。这是一个目录问题,我现在妥协并使用绝对(不是最佳实践)路径,现在文件存在问题已经解决
  • 现在它仍然无法打开文件,我使用接口的成员函数来查看错误代码和错误消息,我得到了0Unkown Error,这不是一个有用的信息

我正在使用:

  • MacOS Mojave 10.14.2
  • 问题5.11.3
  • 编译器:clang_64bit
QFile mapDat("/Users/myname/projectname/file.dat");
if (!mapDat.exists()){
qDebug() << "not exist";
}
QString errMsg;
QFileDevice::FileError err = QFileDevice::NoError;
if (!mapDat.open(QIODevice::ReadOnly) | QFile::Text){
errMsg = mapDat.errorString();
err = mapDat.error();
qDebug() << "could not open it" << err << errMsg;
return;
}
QTextStream in(&mapDat);
QString mText = in.readAll();
qDebug() << mText;
mapDat.close();

我希望qDebug() << mText能在控制台中给我一些东西,但它没有。

输出为:

无法打开它"0";未知错误";

它来自if语句中的qDebug()行。

您的条件是错误的:

if (!mapDat.open(QIODevice::ReadOnly) | QFile::Text)

这将尝试以只读模式打开文件。其结果取反(!),然后与QFile::Text进行"或"运算(即!=0)。所以这个条件永远都是真的。

你有一个简单的打字错误(括号错位):

if (!mapDat.open(QIODevice::ReadOnly | QFile::Text))
//  ^ Bitwise OR of flags for mapDat.open call