Russian Qt Forum

Qt => Общие вопросы => Тема начата: Примерный ученик от Июль 19, 2010, 10:53



Название: самый ранний файл из каталога
Отправлено: Примерный ученик от Июль 19, 2010, 10:53
Есть папка, в которую падают файлы.
Задача передать их по сети в порядке поступления, расширения файлов - произвольные.
Пока файлов мало, проблем нет...
Но когда их несколько тысяч, то QDir начинает притормаживать...
Как можно получить имя очередного выбираемого файла максимально быстро, не читая весь каталог?


Название: Re: самый ранний файл из каталога
Отправлено: ecspertiza от Июль 19, 2010, 12:37
Как вариант построить для начала модель (QDirModel), затем ее отсортировать как нужно, затем брать данные из модели по очереди и отправлять файлы.


Название: Re: самый ранний файл из каталога
Отправлено: Примерный ученик от Июль 19, 2010, 13:21
Забыл сказать, QT3.3.8.
1) Нет модели
2) файлы постоянно могут поступать...


Название: Re: самый ранний файл из каталога
Отправлено: ecspertiza от Июль 19, 2010, 13:32
Тогда могу предложить еще пару вариантов

1. Реализовать многопоточность, то есть один поток будет постоянно в некоторое хранилище писать данные о файле который нужно отправить, второй будет читать данные из этого хранилища и отправлять, если оно пустое то спит несколько секунд(ну или как нужно). Только здесь нужно будет поаккуратнее быть с доступом к хранилищу.

2. Реализовать свое подобие модели, по сути это просто класс хранящий массив значений, с удобным доступом к ним, записали данные в модель отсортировали, начали отправлять, как все ушло запоминаем дату последнего файла и начинаем цикл заново, только уже начинаем записывать с последней даты, я думаю что файлы из прошлого приходить не могут, а стало быть и проблем быть не должно.


Название: Re: самый ранний файл из каталога
Отправлено: Примерный ученик от Июль 19, 2010, 13:55
ecspertiza
Вопрос в том, каким способом я могу в каталоге ".../p/" узнать имя самого старого файла, не читая содержимого всего каталога?


Название: Re: самый ранний файл из каталога
Отправлено: ecspertiza от Июль 19, 2010, 14:30
Не знаю есть ли такая фича в Qt 3, в 4 точно есть для QDir есть ф-ция QFileInfoList   entryInfoList ( const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort ) вот последний флаг и задает сортировку, можешь выставить QDir::DirsLast, но я думаю что в этом случае он все равно загрузит всю инфу о файлах в память.
Код:
Вопрос в том, каким способом я могу в каталоге ".../p/" узнать имя самого старого файла, не читая содержимого всего каталога?

Скорее всего никак :)