Функция для определения уникальности файла по содержанию. | |
---|---|
OlegA Автор Сообщений: 533 Откуда: Иркутск Дата регистрации: 22.06.2001 |
Добрый день.
Подскажите функцию для определения уникальности файла по содержанию. Файлы могут быть по размеру более 30Мб. Спасибо. |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
dimuhametov Сообщений: 1562 Откуда: Костанай Дата регистрации: 01.11.2008 |
|
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Для этого надо вычислять хэш файла по одному из алгоритмов. Цитата:Скажем в PowerShell (более новый аналог командной строки, в десятке стоит по умолчанию, в семерке можно доустановить) для этого уже есть встроенная функция Get-FileHash с алгоритмами SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5 и RIPEMD160. Для больших файлов вычисление хэша естественно не мгновенно, будет занимать сколько-то времени. Чем сложнее и соответственно защищеннее алгоритм, тем больше. Также, вот например была тема для более простого алгоритма CRC64: forum.foxclub.ru В сообщении Рома пристегнута dll-ка для вычисления хэша по алгоритму CRC64 и пример ее использования. Возможно этого и будет достаточно. Либо можно поискать другие сходные темы. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
С ума сойти как все сложно.
А побайтово считать и сравнить уже не канает? Или другие нюансы? Размер файла хоть бы. Или функционал. Вдруг это PRG? (30мб) Концевые пробелы и пр. - в топку. Надо компилить и сравнивать итог. Да и вообще. Любой почти файл "Сохранить как..." и следом опять "Сохр как". Будут не совпадать. Задача не раскрыта. |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
SYS(2007, FILETOSTR(файл), 0, 1) если файл убирается в память
|
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
OlegA Автор Сообщений: 533 Откуда: Иркутск Дата регистрации: 22.06.2001 |
Всем большое спасибо.
|
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Хэш не гарантирует "уникальности". Существуют различные наборы данных (пусть будет файл, это не суть важно) которые выдадут одинаковые хэши, при том будучи на самом деле разными. Для современных алгоритмов хэширования с "большими" размерами хэшей вероятностью конфликта можно пренебречь, она очень и очень мала. Но если это жизненно важные данные, то после совпадения хэша придётся ещё и побайтово сравнивать.
------------------ WBR, Igor |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
А как же весь интернет, миллиарды пользователей? ;) Предлагающих при скачивании выкладываемых ими файлов сверять именно хэши? Они все идиоты?
Ну это-то понятно, нечто как бы само собой разумеющееся, но сколько оно по времени интересно займет, в сравнении с функциями вычисления хэша. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Последнее время после многого, все больше убеждаюсь, что никаких "жизненно важных данных" вообще не существует. "Жизненно важна" только жизнь человека. А все остальное полная хрень. Никому не нужная. Даже если завтра вдруг исчезнут все эти "данные", по большому счету, ничего не изменится. Люди будут так же точно жить как и жили. И все будет крутиться, как будто ничего и никогда не было. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> побайтово сравнивать. ..., но сколько оно по времени интересно займет, в сравнении с функциями вычисления хэша.
Хешировать - столько же, сколько сравнивать. В обоих случаях файл придется весь прочитать. Хешь просто удобнее хранить, чем сам файл... |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Некоторые - идиоты. Они не знают, что хэш только снижает вероятность коллизии, но не делает её нулевой. Чтение двух потоков занимает меньше времени, чем чтение двух потоков с одновременным выполнением математических операций. |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Ну правильно. Если нужно сравнить всего два файла, то их проще сравнить побайтно. А вот если нужно сравнить один или несколько файлов с неким множеством, уже имеющимся в хранилище, тогда проще сравнивать хэшами (а потом уже и побайтно). |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
akvvohinc Сообщений: 4201 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Проверять побайтно предполагается лишь при совпадении хэш-сумм. А вероятностью какой-то ошибки (например, оборудования), приводящей к разным суммам для одного и того же файла, для "жизненно важных данных" можно пренебречь? |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Например, ошибками процессора, дискового хранилища файлов?
|
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Всё же зависит от цены ошибки. И от того, сколько времени вы готовы потратить в конкретном случае для снижения её вероятности. От этого будут зависеть и методы, и алгоритмы, и оборудование. |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Интересно еще, какие конкретно у ТС проверяются файлы.
Если скажем офисные документы или медиа-файлы, думаю даже обычная проверка на точное совпадение размера давала бы практически однозначный результат. Обычно не бывает, чтобы разные документы имели одинаковый до байта размер. Теоретически может и возможно. Но на практике например никогда ничего такого и близко не встречалось. Не уверен, что без ухищрений можно создать два отличающихся документа или медиа одного размера. Любое изменение дает совершенно уже какие-то другие цифры. Видимо связано с особенностями самой кодировки таких файлов. Если же скажем у него сравниваются dbf-ки или другие непакуемые текстовые форматы - ну тут уже конечно, одним сравнением размера никак не обойтись. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 01.04.21 10:46 |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Дублирование, избыточность, распределённые системы, принятие решение на основании голосования (кворум, большинство). Если у тебя 100 серверов (а лучше 100500) вычисляют этот самый хэш для одного и того-же файла, то вероятность того что все 100 попадут на одну и ту же ошибку оборудования (получат сбой в одном и том же месте этого файла) исчезающе мала. А если они ещё и считают его используя разные реализации алгоритма хэширования (написанные на разных языках, и сами они работают на разных ОС и даже процессорных архитектурах), то и вероятность "ошибки в говнокоде" сводится к минимуму. А если они считают не 1 хэш а пару десятков, то и вероятность "косяка в матаппарате вычисления хэша" минимизируется. В общем любой каприз за ваши деньги ------------------ WBR, Igor |
Re: Функция для определения уникальности файла по содержанию. | |
---|---|
andreyyyyyy Сообщений: 9 Дата регистрации: 24.04.2011 |
Надо же.
Всегда обходился обычным filetostr() с последующим сравнением строк, а тут почитал о нюансах. Интересно. Жаль, не все понял ( |
© 2000-2024 Fox Club  |