Название: самый ранний файл из каталога Отправлено: Примерный ученик от Июль 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/" узнать имя самого старого файла, не читая содержимого всего каталога? Скорее всего никак :) |