![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
NetDigger |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 25.4.2004 Репутация: нет Всего: нет |
Здравствуйте!
И еще раз озадачу: нужно сделать процедуру, которая бы на входе имела имя логического диска (или подпапки) и искала на них одинаковые файлы (имя, размер, дата). Конечно, и бинарное сравнение возможно реализовать если будет не слишком громоздко и долгодумающе. Брать FindFirst, FindNext, FindClose и вперед? Как тогда проводить сравнение - брать первый попавшийся файл и по всем папкам его искать, затем следующий и так до второго пришествия? Это хорошо, когда файлов на диске 100, а если их 60000? Или я ошибаюсь? |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Обходи все файлы FindFirst .. FindNext...
При этом инфу о каждом файле заноси в массив. И при занесении в массив ищи, есть ли уже в массиве такой файл... Если есть, то это двойники. Можно сравнить по содержимому... -------------------- С уважением, г-н Посол. |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Если ручками массив делать - будет долго... Тут бы базу данных использовать, где способы увеличения скорости уже продуманы
![]() Но это я чисто теоретически философствую - сам не силён в базах данных. Однако, редсказаваю, что при 10000 файлов с использованием обычного массива тормозить будет жутко ![]() |
|||
|
||||
SlaUr |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
используйте модули Mysys.tpu ,Mystr.tpu
(mystr только для cNFi) Сначала создаем листы всех файлов на дисках
Сейчас у нас В List1 и List2 конкретные пути к файлам. Вычисляем контрольные суммы файлов
Теперь мы имеем листы с именем файла и через разделитель "|" контрольная сумма. Далее сравниваем листы по контрольным суммам и в случае одинаковости контрольных сумм по содержимому файлов.
И не забыть в конце
в данном случае вместо использования Are2FilesEqual лучше написать свою функцию (Are2FilesEqual в модуле mysys загружает файлы в память и если фалйы большие то это не правильно) нужно написать свою функцию используя например BlockRead (если не ошибаюсь) и сравнивать блоки. p.s.Сначала наверно нужно сравнить файлы между собой на каждом из дисков Это сообщение отредактировал(а) SlaUr - 18.11.2004, 08:40 |
||||||||
|
|||||||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Я бы сначала сравнивал по размеру, потом по контр. суммам, а затем уже побайтно
![]() |
|||
|
||||
SlaUr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 18.9.2003 Репутация: 3 Всего: 5 |
dm9Да ,вы правы,по моему это наиболее быстрый способ,просто я сравнивал с помощью вышенаписанного алгоритма картинки(кнопки) а они почти все одинакового размера
Это сообщение отредактировал(а) SlaUr - 18.11.2004, 08:35 |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Ну если идёт речь о супер больших объёмах, то БД тут не сильно спасёт. Самый быстрый способ всё равно будет через массив.
Только вначале его заполняем... Потом сортируем его быстрой сортировкой (или еще более крутым методом), например, по размеру файла (20 млн Single чисел быстрой сортировкой без всяких ухищрений сортируются за 6-7 секунд, а тут будут просто Integerы - еще быстрее). После сортировки найти все одинаковые файлы будет очень просто... -------------------- С уважением, г-н Посол. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |