![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск дубликатов файлов [D7]
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
Пойдет?