Выяснил такую неприятную вещь. Оказывается, объект 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 до текущего? Или этот объект один раз получает состояние директории, и больше в своем внутреннем представлении изменить его не может?