Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск дубликатов файлов [D7]


Страницы:   1 2

Dyakon_Frost ©   (2007-06-23 07:18:00) 

Здравствуйте!
Необходимо написать программу для поиска дубликатов файлов на диске!
Честно говоря не знаю даже с чего начать. Подскажите пожалуйста алгоритм, или статейку где можно почитать подробно по поиску файлов в системе.

Заранее спасибо.


Игорь Шевченко   (2007-07-02 15:55:00) [1]

Anatoly Podgoretsky ©   (02.07.07 15:35) [19]


> Поскольку достаточно читать до первого не совпадающего байта,
>  зачем читать дальше если уже известно, что файлы не равны,
>  то есть не дубликат.


У меня на диске пара сотен тысяч файлов, это сколько ж мне чтений надо будет ? :)


Anatoly Podgoretsky   (2007-07-02 15:38:00) [2]

Возможно ты имеешь в виду сображение более высокого порядка, тогда да CRC будет быстрее.


Anatoly Podgoretsky   (2007-07-02 15:35:00) [3]

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


homm   (2007-07-02 15:31:00) [4]

> Этой мысли я не понял. Почему нет необходимости читать весь файл ?

Как это, если уже 5-я символ не совпадает, какой смысл сравнивать 6-й?


Игорь Шевченко   (2007-07-02 15:24:00) [5]

Anatoly Podgoretsky ©   (02.07.07 15:11) [14]


> главное, что при сравнение нет необходимости читать весь
> файл


Этой мысли я не понял. Почему нет необходимости читать весь файл ?


homm   (2007-07-02 15:15:00) [6]

> > другой для первого килобайта
> Чем первый лучше второго, третьего и т.д.

Э...


> [11] Anatoly Podgoretsky ©   (02.07.07 14:28)
> а при сравнение только до первогонесравнившегося блока,
> что может ускорить на порядки.


Anatoly Podgoretsky   (2007-07-02 15:13:00) [7]

> homm  (02.07.2007 14:40:13)  [13]

> Операция вычисления хеша значительно быстрее, чем чтение с диска

Конечно, Hash := Random(X)

> другой для первого килобайта

Чем первый лучше второго, третьего и т.д.


Anatoly Podgoretsky   (2007-07-02 15:11:00) [8]

> Игорь Шевченко  (02.07.2007 14:30:12)  [12]

Не игнорируй замечание, что расчет CRC требует больше времени и главное, что при сравнение нет необходимости читать весь файл.


homm   (2007-07-02 14:40:00) [9]

> Да и операция расчета хеша значительно дольше чем простое сравнение.

Я бы сильно поспорил с этим утверждением. Операция вычисления хеша значительно быстрее, чем чтение с диска, а т.к. они идут паралельно, то от ее скорости ничего не зависит.

Всегда можно найти алгоритм, более быстрый. Например хранить 2 хеша, один для всего файла, другой для первого килобайта, и вычислять второй только когда первые у каких-то файлав совпали.


Игорь Шевченко   (2007-07-02 14:30:00) [10]

Anatoly Podgoretsky ©   (02.07.07 14:28) [11]


>  где во главу угла ставится не скорость, а удобство для
> дальнейшей обработки


Да, конечно.


> Лишнее, поскольку n*m прочтений файлов, затем расчет CRC


Каждый файл собственно читается один раз - при вычислении CRC :)


Anatoly Podgoretsky   (2007-07-02 14:28:00) [11]

Лишнее, поскольку n*m прочтений файлов, затем расчет CRC, затем сравнение хешей, при этом n*m это полное чтение каждого файла, а при сравнение только до первого несравнившегося блока, что может ускорить на порядки. Да и операция расчета хеша значительно дольше чем простое сравнение.
Единственное оправдание может быть Игорь Шевченко ©   (02.07.07 13:29) [8] - где во главу угла ставится не скорость, а удобство для дальнейшей обработки.


homm   (2007-07-02 13:51:00) [12]

Вместо знака ? длжен был быть юникодный знак умножения.


homm   (2007-07-02 13:50:00) [13]

> CRC16 лишнее, потеря времени, достаточно явно сравнивать,
> после проверки на размер, лучше поблочно.

Фигасе лишнее. Так имеем, нестрого говоря, «всего» n*m прочтений файлов, и n?n*m сравнений хешей, а без CRC16 тока n?n*m считываний файлов. Где n—количество файлов заданого размера, m—количество заличных размеров файлов.


Игорь Шевченко   (2007-07-02 13:29:00) [14]

Anatoly Podgoretsky ©   (02.07.07 13:09) [7]

Не лишнее. Мне надо было найти список всех дублей на диске и было удобно составить список имя файла,размер,CRC, отсортировать его и выдать, либо батник на удаление дублей, либо в интерактивном режиме.


Anatoly Podgoretsky   (2007-07-02 13:09:00) [15]

> Игорь Шевченко  (02.07.2007 12:32:06)  [6]

CRC16 лишнее, потеря времени, достаточно явно сравнивать, после проверки на размер, лучше поблочно.


Игорь Шевченко   (2007-07-02 12:32:00) [16]

Я писал программу, сравнивающую размер и CRC16 файлов. Мне хватало.


Anatoly Podgoretsky   (2007-07-02 11:53:00) [17]

Очень грамотное определение.


Dyakon_Frost   (2007-07-02 11:23:00) [18]

Разобрался спасибо!
Дублик - идентичные!


Anatoly Podgoretsky   (2007-06-23 12:13:00) [19]

> Dyakon_Frost  (23.06.2007 07:18:00)  [0]

Что такое дубликат, определение в студию.


Инс   (2007-06-23 10:19:00) [20]

Поиграем в телепатов :)

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=26329
Пойдет?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо