Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 23:49   #1
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию Алгоритм обработки большого количества файлов в директории

Привет всем. Недавно столкнулся с проблемой удаления большого количества файлов из директории (50 000-100 000). Файловые менеджеры виснут при открытии такой директории (можно конечно подождать, но это не выход). Программно удаляю при помощи FindFirst, FindNext, но это также долго. Может у кого есть какие-нибудь другие алгоритмы обработки файлов?
furstenberg вне форума Ответить с цитированием
Старый 28.05.2013, 00:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Разве что искать и удалять в разных потоках...
Хотя если посудить такое огромное кол-во файлов быстро не удалить все равно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2013, 00:19   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а что такое долго?
eval вне форума Ответить с цитированием
Старый 28.05.2013, 00:22   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Многопоточность называется.
Читается список файлов, делится на кол-во потоков и пускается в расход.
Человек_Борща вне форума Ответить с цитированием
Старый 28.05.2013, 00:23   #5
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию

Т.е если те же findfirst -findnext запускать в нескольких потоках, быстрее работать будет?

Медленно значит нажал на кнопку и всё- вроде бы что то и обрабатывается, но и висит, ни ответа не привета.

Т.е 100 делим на 5, получается 4 потока - каждому по 20 файлов что ли?
Тогда при получении файлов всё-равно затуп будет пока считать их будешь, так ведь

Последний раз редактировалось Stilet; 28.05.2013 в 09:28.
furstenberg вне форума Ответить с цитированием
Старый 28.05.2013, 00:31   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Медленно значит нажал на кнопку и всё- вроде бы что то и обрабатывается, но и висит, ни ответа не привета.
странноватое опредлеление..
а что надо чтобы происходило?
eval вне форума Ответить с цитированием
Старый 28.05.2013, 00:42   #7
furstenberg
Форумчанин
 
Регистрация: 08.10.2007
Сообщений: 125
По умолчанию

Грубо говоря нужна обработка без зависаний и соответствующая индикация.
furstenberg вне форума Ответить с цитированием
Старый 28.05.2013, 01:09   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Уверен многопоточность не поможет - операции на накопителе выполняются последовательно. И толку с кучи потоков?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.05.2013, 01:09   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Т.е если те же findfirst -findnext запускать в нескольких потоках, быстрее работать будет?
Читаете папку FindFirst, FindNext 1 раз.
Потом просто делите на потоки(передаете пути к файлам) и раздаете люлей файлам.
Индикацию с помощью прогресс бара делайте.

Отключите индексацию файлов на время работы ПО. Значительно все ускорит.

Ещё вариант низкоуровневых дисковых операций. Через openFile и пошуршал.
Через WinHex открывайте диск и удаляйте.

Последний раз редактировалось Человек_Борща; 28.05.2013 в 01:12.
Человек_Борща вне форума Ответить с цитированием
Старый 28.05.2013, 01:17   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
без зависаний и соответствующая индикация.
это просто, создайте доп. поток, который будет удалять и извещать уи поток, о прогрессе. а уи в свою очередь отображать узеру.
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Архивация большого количества файлов 88ra Microsoft Office Excel 3 22.09.2012 16:20
Создание большого количества потоков Crystallon Общие вопросы Delphi 3 03.06.2011 02:42
Как свести информацию из большого количества файлов в один Rahmeev Microsoft Office Excel 3 21.05.2010 07:11
Проблема большого количества форм... Mr.Qwerty Общие вопросы Delphi 2 16.07.2009 16:53
непрерывная смена большого количества фотографий brenfire Помощь студентам 5 08.08.2008 11:23