Как исправить ошибку открытия QFile (неизвестная ошибка), даже если файл существует? - PullRequest
0 голосов
/ 31 января 2019

Я новичок в C ++ и Qt.Я пытаюсь открыть и прочитать файл map.dat с помощью интерфейса QFile, но он не откроет этот файл, даже если он существует в каталоге.

  1. Я пробовал fopen ifstream в C ++,но они постоянно говорят мне, что файл не существует, даже если я добавил его в папку ресурсов (.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", это строка qDebug() в операторе if.

1 Ответ

0 голосов
/ 31 января 2019

Ваше условие неверно:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...