我正在尝试打开并阅读 map.dat
文件使用 QFile
界面,但它不会打开该文件,即使该文件确实存在于目录中。
- 我已经尝试过
fopen
,ifstream
在 C++ 中,但他们一直告诉我该文件不存在,即使我已将其添加到资源文件夹(.qrc
)中。然后我转向QFile
接口(interface)问题依旧。这是一个目录问题,我现在妥协并使用绝对(不是最佳实践)路径,现在文件存在问题已解决。 - 现在还是打不开文件,我用接口(interface)的成员函数看看错误码和错误信息是什么,得到
0
和Unkown Error
这不是有用的信息。
我正在使用:
- MacOS Mojave 10.14.2。
- Qt 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
在控制台中给我一些东西,但它没有。
输出为:
could not open it 0 "Unknown error"
来自qDebug()
if 语句中的一行。
最佳答案
您的条件错误:
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
关于c++ - 即使文件存在,如何修复 QFile 打开错误(未知错误)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54464877/