Показать сообщение отдельно
  #13  
Старый 07.03.2017, 20:45
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
- в цикле ДЛЯ файлы вызываются по имени и анализируются по указанным параметрам (размер файла, тип файла, ширина-высота файла) и ИМЕНА файлов сортируются в списке по правилам
- файл с первым именем в списке(с самым большим индексом) вызывается, обрабатывается и сохраняется в другом каталоге с другим именем
Следовательно, все файлы тебе не нужны, нужен только один по совокупности признаков. Признаками не является весь файл.
Сортировка всегда основывается на сравнении двух элементов по набору признаков, значит эта функция сравнения у тебя есть. Назовем её "условием F".
Поэтому:
0) Делаешь переменную с одной (первой попавшейся) картинкой в памяти. Называем её "текущей". Сохраняешь в переменных её параметры.
1) Скачиваешь очередную картинку.
2) Вытаскиваешь нужные тебе признаки.
3) Проверяешь условие F для скачанной картинки и для текущей. Если по этим признакам скачанная картинка должна оказаться при сортировке до текущей - в переменную текущей картинки сохраняешь скачанную и меняешь переменные с параметрами.
В противном случае выбрасываешь скачанную, т.к. она в любом случае не окажется первой при сортировке (ведь текущая до неё).
4) Если есть что еще качать - вернуться к п.1.

Стандартная задача поиска минимума.
Плюс, если подумать, параметр "размер" можно получить, не скачивая картинку вообще, параметр "тип" - скачав первые 4 байта, а параметры ширины и высоты в большинстве случаев - скачав заголовок картинки соответствующего типа. Поэтому если нужно, то при "анализе" можно выбирать нужную картинку, не скачивая ничего целиком, и уже после скачать полностью только ту, которая найдется этим импровизированным поиском минимума.

При этом понятно, что скачивание занимает значительно больше времени, чем "анализ" ширины и высоты с размером. Поэтому скачивать можно в потоках, а "анализ" с перезаписыванием "текущей" синхронизировать через стандартные механизмы синхронизации потоков.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием