我正试图使用QFile
接口打开并读取map.dat
文件,但它不会打开该文件,即使该文件确实存在于目录中。
- 我在C++中尝试过
fopen
、ifstream
,但他们一直告诉我该文件不存在,即使我已将其添加到资源文件夹(.qrc
)中。然后我转到QFile
接口,问题仍然存在。这是一个目录问题,我现在妥协并使用绝对(不是最佳实践)路径,现在文件存在问题已经解决 - 现在它仍然无法打开文件,我使用接口的成员函数来查看错误代码和错误消息,我得到了
0
和Unkown 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