LINUX.ORG.RU

Как в Qt обновить entryList для QDir

 ,


0

1

Выяснил такую неприятную вещь. Оказывается, объект QDir не обновляет свое состояние после действий над директорией. Qt 5.4.2.

Например, получем список файлов в QDir, удаляем все файлы в QDir, потом вызываем метод entryList(), а он возвращает не новое состояние диретории, а старое с файлами:

  QDir dirFrom(nameDirFrom);
  QStringList fileList=dirFrom.entryList();

  ... удаление всех файлов в директории nameDirFrom ...

  // Проверка наличия файлов внутри очищенной директории
  foreach(QString fileInDir, dirFrom.entryList())
    qDebug() << "File in empty dir: " << fileInDir;

  // Проверка наличия файлов внутри очищенной директории через новый временный объект директории
  QDir tempDirFrom(nameDirFrom);
  foreach(QString fileInDir, tempDirFrom.entryList())
    qDebug() << "File in empty dir with temp dir object: " << fileInDir;


Результат:

16:47:27 [DBG] File in empty dir:  "."
16:47:27 [DBG] File in empty dir:  ".."
16:47:27 [DBG] File in empty dir:  "text.html"
16:47:27 [DBG] File in empty dir with temp dir object:  "."
16:47:27 [DBG] File in empty dir with temp dir object:  ".."


Видно, что метод dirFrom.entryList() возвращает список с несуществующим файлом text.html.

А метод tempDirFrom.entryList() возвращает правильный список, который должен быть у пустой директории.

В доках не нашел никакой информации об update состояния QDir.

Вопрос: как обновить состояние QDir до текущего? Или этот объект один раз получает состояние директории, и больше в своем внутреннем представлении изменить его не может?

★★★★★

Вообще, entryList() это ООООЧЕНЬ медленный вызов. Лучше использовать QDirIterator.

grondek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.