Qt QFileInfo.isDir() возвращает неверный результат

У меня проблема с классом Qt QFileInfo, вот пример кода

 QString path = "C:\\Some\\Path";
 QFileInfo pathFileInfo(path);
 if (pathFileInfo.isDir()){
     qDebug() << "path is dir, cdUp";
     pathDir.cdUp();
  } else {
      qDebug() << "path is not dir, getting dir";
      pathDir = pathFileInfo.dir();
  }

Когда путь каталога существует в папке "Some", pathFileInfo.isDir() возвращает false
Если я исправляю путь и добавляю к нему QDir::separator(), pathFileInfo.isDir() возвращает true
Как использовать эти методы правильно определить, является ли данный путь папкой или файлом?


person Ruslan F.    schedule 02.08.2014    source источник
comment
Что произойдет, если вы измените путь на 'QString path = C:\\Some\\Path;'   -  person hasan    schedule 03.08.2014
comment
это просто опечатка в примере. Путь с правильным экранированием и не жестко запрограммирован   -  person Ruslan F.    schedule 04.08.2014


Ответы (2)


Будьте осторожны с обратными косыми чертами, их нужно экранировать. Замените объявление пути на:

QString path = "C:\\Some\\Path";

или используйте:

QString path = "C:/Some/Path";

Надеюсь, это решит вашу проблему.

person jpo38    schedule 02.08.2014

Косые черты, такие как "/" и "\", различаются в Linux и Windows. Вы можете использовать метод static QString QDir::toNativeSeparators ( const QString & pathName ), чтобы получить правильный путь с правильными разделителями для вашей платформы.

Так что просто сделайте это:

QString path = QDir::toNativeSeperators( "/your/path/here" );
//you can also use path2 instead of path since they are both the same
QString path2 = QDir::toNativeSeperators( "/your\path/here" );
 QFileInfo pathFileInfo(path);
 if (pathFileInfo.isDir()){
     qDebug() << "path is dir, cdUp";
     pathDir.cdUp();
  } else {
      qDebug() << "path is not dir, getting dir";
      pathDir = pathFileInfo.dir();
  }

Вот ссылка на документацию.

person Davlog    schedule 02.08.2014