Привет любителям Qt, у меня вопрос по поводу сортировки файлов. Создаю объект QDir:
QDir dir("D:/test_folder"); QStringList files = dir.entryList(); for (int i = 0; i < files.size(); i++) { qDebug() << files.at(i); }
Для теста вывожу список файлов в папке. Файлы выводятся отсортированные по имени файла, в алфавитном порядке. Как мне сделать, чтобы файлы в QStringList files были отсортированы по времени изменения?
Добрый день!
Это реализуется через:
setSorting(QDir::SortFlags sort)
Аргумент может быть:
Constant | Value | Description |
---|---|---|
QDir::Name | 0x00 | Sort by name. |
QDir::Time | 0x01 | Sort by time (modification time). |
QDir::Size | 0x02 | Sort by file size. |
QDir::Type | 0x80 | Sort by file type (extension). |
QDir::Unsorted | 0x03 | Do not sort. |
QDir::NoSort | -1 | Not sorted by default. |
QDir::DirsFirst | 0x04 | Put the directories first, then the files. |
QDir::DirsLast | 0x20 | Put the files first, then the directories. |
QDir::Reversed | 0x08 | Reverse the sort order. |
QDir::IgnoreCase | 0x10 | Sort case-insensitively. |
QDir::LocaleAware | 0x40 | Sort items appropriately using the current locale settings. |
То есть для Вашего примера:
QDir dir("D:/test_folder"); dir.setSorting(QDir::Time); QStringList files = dir.entryList(); for (int i = 0; i < files.size(); i++) { qDebug() << files.at(i); }
Спасибо, получилось, но теперь хочу поменять порядок вывода. То есть изначально вышло от последнего изменения к более ранним, а я хочу наоборот. Пробую так:
QDir dir("D:/test_folder"); dir.setSorting(QDir::Time); dir.setSorting(QDir::Reversed);
Но выводится снова в алфавитном порядке, только теперь в обратном направлении.
QDir dir("D:/test_folder"); dir.setSorting(QDir::Time | QDir::Reversed);
QDir dir("D:/test_folder"); dir.setSorting(QDir::Time | QDir::Reversed);
Понял, спасибо, получилось!
Тему закрываю)