Неожиданное поведение QDir ::entryInfoList

#c #qt4

#c #qt4

Вопрос:

Мой код довольно прост:

 void DirManagement::listFiles(QDir dir)
{
   QFileInfoList list = dir.entryInfoList(QDir::NoFilter, QDir::NoSort);
   for (int i = 0; i < list.size();   i)
   {
      QFileInfo fInfo = list.at(i);
      QString fPath = fInfo.absoluteFilePath();
      qDebug() << "# " << i << fPath;   }
}
  

Проблема в том, что если мой путь к каталогу: «/home /adasi / Desktop /GCUFolder»
, это результат:

 #  0 "/home/Alya/Desktop/MCUFolder" 
#  1 "/home/Alya/Desktop" 
#  2 "/home/Alya/Desktop/MCUFolder/32Mon Oct 24 2011" 
#  3 "/home/Alya/Desktop/MCUFolder/32Sun Oct 23 2011"
  

Однако я ожидаю только того, что находится в данном каталоге:

 #  0 "/home/Alya/Desktop/MCUFolder/32Mon Oct 24 2011" 
#  1 "/home/Alya/Desktop/MCUFolder/32Sun Oct 23 2011"
  

Я перепробовал большинство фильтров qt. Не сработало.

Комментарии:

1. «/home/Alya/Desktop/MCUFolder/32Mon 24 октября 2011» это папка или файл? Может быть, символическая ссылка?

Ответ №1:

Просто чтобы добавить больше информации, это сработало, как сказал Mat, указав, что вы хотите перечислить, например:

 myQdirObject.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::NoSort);
  

Комментарии:

1. Это правильно. простая передача QDir::nodot иdotdot приведет к получению пустого списка. оно должно быть объединено с другим флагом, который указывает, что вы хотите (например, QDir :: Dirs, QDir::Files и т. Д.). Mat абсолютно корректен в дополнительном комментарии к его ответу, но этот ответ содержит полный код для достижения того, чего хочет OP. Голосование за.

2. В нескольких словах: если вы используете один флаг, вы должны полностью указать правила фильтрации.

Ответ №2:

Используйте QDir::NoDotAndDotDot фильтр, это удалит сам каталог и его родительский каталог из поиска.

Комментарии:

1. аналогично —> пустой список Ничего не было указано!!

2. Вам нужно указать, какой тип файла вы хотите включить в список с QDir::Files помощью , QDir::Directories , QDir::Drives или одной из комбинированных констант.

3. что мне нужно, так это папки, я пробовал QDir::Files и QDir::Directories, ни один из них не работал!

4. Эта функция работает, я не могу сказать, в чем ваша проблема, не видя код, который вы использовали, и какие разрешения и типы файлов относятся к материалу, который вы пытаетесь перечислить.

Ответ №3:

entryInfoList Должен вызываться с QDir::NoDot | QDir::NoDotDot фильтром :

 QFileInfoList list = dir.entryInfoList(QDir::NoDot | QDir::NoDotDot, QDir::NoSort);
  

Проверьте соответствующую документацию Qt для получения дополнительных фильтров.

Комментарии:

1. Mat дал в основном тот же ответ 4 часа назад. Попробуйте прочитать, что написали другие, прежде чем отвечать.

2. это не работает!! когда я устанавливаю этот фильтр, я получаю пустой список!!