![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
lugaru |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.11.2011 Репутация: нет Всего: нет |
Добрый день!
Подскажите как или по каким параметрам можно сравнить два любых файла. Например: в двух папках есть два файла с одинаковым именем но с разными датами изменения, но файлы то могут быть одинаковыми. Вот как узнать что файлы одинаковые? |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Можно перебором. Сначала для каждого файла вычислить хеш, а потом сравнить каждый хеш с каждым - если одинаковые, сравнивать содержимое целиком.
|
|||
|
||||
Nofate |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 13.10.2008 Репутация: 4 Всего: 8 |
Подсчитать контрольную сумму для начала.
-------------------- The future is not set, there is no fate but what we make for ourselves. Нофейтово пространство и смежные области |
|||
|
||||
lugaru |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.11.2011 Репутация: нет Всего: нет |
Тогда следующий вопрос, закономерный)))
После поисков в интернете наткнулся на хэш коды: MD5, CRC32, SHA-1 Как Вы щитаете что с этого больше подойдет для данной задачи????? |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Да любой берите, если скорость роли не играет.
Это сообщение отредактировал(а) Stolzen - 14.12.2011, 04:41 |
|||
|
||||
lugaru |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.11.2011 Репутация: нет Всего: нет |
в том от и дело что играет) программа должна работать как сервис, висеть в трее, и не хотелось бы что-бы она лишниее ресурсы использывала |
|||
|
||||
ci5 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 24.12.2008 Репутация: нет Всего: нет |
2 разных файла могут иметь одинаковый хеш.
Что разве другого способа узнать идентичность файлов нету? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Сравнить побайтово. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Тогда перепробуйте все три и выберете наиболее быстрый. Можно вообще в качестве хеш-функции использовать размер файла. Или хешить только первые n байт. Это сообщение отредактировал(а) Stolzen - 14.12.2011, 15:22 |
|||
|
||||
lugaru |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.11.2011 Репутация: нет Всего: нет |
а вот это идея! спасибо |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Ну, для начала, видимо, нужно определить что такое "одинаковые файлы"
![]() ![]() Видимо, предполагается одинаковое содержание и одинаковые имена. Для экономии времени я бы сделал так. 1. Сравниваем имена - 99.99......% сравнений дает "разные" - ответ получен. Об этих файлах больше не беспокоимся 2. У оставщихся сравниваем длину. Отфильтровываем еще 99.99......% 3. Сравниваем что-нибудь-еще. Хэш, конрольную сумму, цвет глаз владельца - отбрасываем еще 99.99......% 4. Оставшиеся сравниваем побайтово - единственный способ дающий полную гарантию. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
lugaru |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.11.2011 Репутация: нет Всего: нет |
Я себе примерно так и нарисовал, просто думал о какомто унифицированом одном способе))) для меня основная задача стоит например в текстовых файла: название может быть одинаково и размер файла тоже но по содержанию они могу отличаться. |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Кстати, побайтовой сравнение не так страшно как кажется.
В качестве модели возьмем два бинарных файла заполненных битами случайным образом. Тогда совпадение первых байтов фалов происходит с вероятностью 2 в степени -8. Совпадение двух первых байтов подряд уже в степени -16 и т.д. Подавляющее большинство пар будет отсеиваться уже на первых нескольких байтах. Понятное дело, что биты в файлах распределены не случайным образом, что увеличит вероятность совпадения. Но все равно до конца пару файлов придется сканировать только в том редчайшем случае если эти файлы идентичны до предпоследнего байта и только последний байт у каждого свой. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
lugaru |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 18.11.2011 Репутация: нет Всего: нет |
спасибо, дали более чем достаточно о чем подумать, байтовое сравнение оставлю на крайний случай.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вычисление хеша и так требует полного чтения файлов, можно сразу просто сравнить. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |