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

标签 c++ qt qt5 qfile

我正在尝试打开并阅读 map.dat文件使用 QFile界面,但它不会打开该文件,即使该文件确实存在于目录中。

  • 我已经尝试过fopen , ifstream在 C++ 中,但他们一直告诉我该文件不存在,即使我已将其添加到资源文件夹( .qrc )中。然后我转向QFile接口(interface)问题依旧。这是一个目录问题,我现在妥协并使用绝对(不是最佳实践)路径,现在文件存在问题已解决。
  • 现在还是打不开文件,我用接口(interface)的成员函数看看错误码和错误信息是什么,得到0Unkown 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/

相关文章:

c++ - 将LPVOID位图指针转换为QPixmap

c++ - Qt 5.1.1在vs2010编译报错

c++ - 尝试从源构建 Qt 会导致错误

c++ - 如何正确恢复由 windows 7/vista aero snap 调整大小的小部件

c++ - 在 Qt5 中通过 uart 发送一个大缓冲区

c++ - 连接函数错误QT 5

c++ - STL 集中的指针委托(delegate)

c++ - 模板特化函数 C++

c++ - 为什么 'this' 不是 volatile 的?

c++ - 如何在数组QT C++中添加数据