即使文件存在,如何解决QFile打开错误(未知错误)?

时间:2019-01-31 16:19:16

标签: c++ qt

我是C ++和Qt的新手。我正在尝试使用QFile接口打开和读取map.dat文件,但是即使目录中确实存在该文件也不会打开该文件。

  1. 我在C ++中尝试了fopen,ifstream,但即使我将其添加到资源文件夹(.qrc)中,它们也会告诉我该文件不存在。然后我转到QFile界面,问题仍然存在。这是一个目录问题,我现在妥协并使用绝对(不是最佳实践)路径,现在文件存在问题已解决。
  2. 现在它仍然无法打开文件,我使用界面的成员函数查看错误代码和错误消息,并且得到0和“未知错误”,这令人沮丧,因为它们没有给我任何有用的信息。
  3. 我正在使用MacOS Mojave 10.14.2。 Qt 5.11.3。编译器是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();
    

我对C ++相当陌生,但是我希望qDebug() << mText在控制台中给我一些东西,但事实并非如此。输出是 could not open it 0 "Unknown error",位于if语句中的qDebug()行。

1 个答案:

答案 0 :(得分:0)

您的条件不正确:

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