:: Visual Foxpro, Foxpro for DOS
Функция для определения уникальности файла по содержанию.
OlegA
Автор

Сообщений: 533
Откуда: Иркутск
Дата регистрации: 22.06.2001
Добрый день.
Подскажите функцию для определения уникальности файла по содержанию.
Файлы могут быть по размеру более 30Мб.
Спасибо.
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
dimuhametov

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
forum.foxclub.ru


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
OlegA
Подскажите функцию для определения уникальности файла по содержанию.

Для этого надо вычислять хэш файла по одному из алгоритмов.
Цитата:
Вместо того, чтобы идентифицировать содержимое файла по его имени, расширению или другому обозначению, хэш присваивает уникальное значение содержимому файла. Имена и расширения файлов могут быть изменены без изменения содержимого файла и без изменения значения хеш-функции. Точно так же можно изменить содержимое файла без изменения имени или расширения. Однако изменение даже одного символа в содержимом файла изменяет хеш-значение файла.
Скажем в PowerShell (более новый аналог командной строки, в десятке стоит по умолчанию, в семерке можно доустановить) для этого уже есть встроенная функция Get-FileHash с алгоритмами SHA1, SHA256, SHA384, SHA512, MACTripleDES, MD5 и RIPEMD160.
Для больших файлов вычисление хэша естественно не мгновенно, будет занимать сколько-то времени. Чем сложнее и соответственно защищеннее алгоритм, тем больше.

Также, вот например была тема для более простого алгоритма CRC64: forum.foxclub.ru
В сообщении Рома пристегнута dll-ка для вычисления хэша по алгоритму CRC64 и пример ее использования.
Возможно этого и будет достаточно. Либо можно поискать другие сходные темы.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
Taran

Сообщений: 13623
Откуда: Красноярск
Дата регистрации: 16.01.2008
С ума сойти как все сложно.
А побайтово считать и сравнить уже не канает?
Или другие нюансы?

Размер файла хоть бы.
Или функционал. Вдруг это PRG? (30мб)
Концевые пробелы и пр. - в топку.
Надо компилить и сравнивать итог.
Да и вообще. Любой почти файл "Сохранить как..." и следом опять "Сохр как". Будут не совпадать.

Задача не раскрыта.
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
SYS(2007, FILETOSTR(файл), 0, 1) если файл убирается в память
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
OlegA
Автор

Сообщений: 533
Откуда: Иркутск
Дата регистрации: 22.06.2001
Всем большое спасибо.
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Хэш не гарантирует "уникальности". Существуют различные наборы данных (пусть будет файл, это не суть важно) которые выдадут одинаковые хэши, при том будучи на самом деле разными. Для современных алгоритмов хэширования с "большими" размерами хэшей вероятностью конфликта можно пренебречь, она очень и очень мала. Но если это жизненно важные данные, то после совпадения хэша придётся ещё и побайтово сравнивать.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Igor Korolyov
Хэш не гарантирует "уникальности".

А как же весь интернет, миллиарды пользователей? ;)
Предлагающих при скачивании выкладываемых ими файлов сверять именно хэши? Они все идиоты?

Igor Korolyov
если это жизненно важные данные, то после совпадения хэша придётся ещё и побайтово сравнивать.

Ну это-то понятно, нечто как бы само собой разумеющееся, но сколько оно по времени интересно займет, в сравнении с функциями вычисления хэша.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Igor Korolyov
Но если это жизненно важные данные

Последнее время после многого, все больше убеждаюсь, что никаких "жизненно важных данных" вообще не существует.
"Жизненно важна" только жизнь человека.
А все остальное полная хрень. Никому не нужная.

Даже если завтра вдруг исчезнут все эти "данные", по большому счету, ничего не изменится.
Люди будут так же точно жить как и жили.
И все будет крутиться, как будто ничего и никогда не было.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> побайтово сравнивать. ..., но сколько оно по времени интересно займет, в сравнении с функциями вычисления хэша.
Хешировать - столько же, сколько сравнивать. В обоих случаях файл придется весь прочитать. Хешь просто удобнее хранить, чем сам файл...
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
Crispy
Igor Korolyov
Хэш не гарантирует "уникальности".

А как же весь интернет, миллиарды пользователей? ;)
Предлагающих при скачивании выкладываемых ими файлов сверять именно хэши? Они все идиоты?
Некоторые - идиоты. Они не знают, что хэш только снижает вероятность коллизии, но не делает её нулевой.

Crispy
Igor Korolyov
если это жизненно важные данные, то после совпадения хэша придётся ещё и побайтово сравнивать.
Ну это-то понятно, нечто как бы само собой разумеющееся, но сколько оно по времени интересно займет, в сравнении с функциями вычисления хэша.
Чтение двух потоков занимает меньше времени, чем чтение двух потоков с одновременным выполнением математических операций.
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
of63
> побайтово сравнивать. ..., но сколько оно по времени интересно займет, в сравнении с функциями вычисления хэша.
Хешировать - столько же, сколько сравнивать. В обоих случаях файл придется весь прочитать. Хешь просто удобнее хранить, чем сам файл...
Ну правильно. Если нужно сравнить всего два файла, то их проще сравнить побайтно.
А вот если нужно сравнить один или несколько файлов с неким множеством, уже имеющимся в хранилище, тогда проще сравнивать хэшами (а потом уже и побайтно).
Ratings: 0 negative/1 positive
Re: Функция для определения уникальности файла по содержанию.
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
проще сравнивать хэшами (а потом уже и побайтно).
Проверять побайтно предполагается лишь при совпадении хэш-сумм.
А вероятностью какой-то ошибки (например, оборудования), приводящей к разным суммам для одного и того же файла, для "жизненно важных данных" можно пренебречь?
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Например, ошибками процессора, дискового хранилища файлов?
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
pasha_usue

Сообщений: 3647
Откуда: Е-бург
Дата регистрации: 06.10.2006
akvvohinc
Цитата:
проще сравнивать хэшами (а потом уже и побайтно).
Проверять побайтно предполагается лишь при совпадении хэш-сумм.
А вероятностью какой-то ошибки (например, оборудования), приводящей к разным суммам для одного и того же файла, для "жизненно важных данных" можно пренебречь?
Всё же зависит от цены ошибки. И от того, сколько времени вы готовы потратить в конкретном случае для снижения её вероятности. От этого будут зависеть и методы, и алгоритмы, и оборудование.
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Интересно еще, какие конкретно у ТС проверяются файлы.
Если скажем офисные документы или медиа-файлы, думаю даже обычная проверка на точное совпадение размера давала бы практически однозначный результат.
Обычно не бывает, чтобы разные документы имели одинаковый до байта размер.
Теоретически может и возможно. Но на практике например никогда ничего такого и близко не встречалось. Не уверен, что без ухищрений можно создать два отличающихся документа или медиа одного размера.
Любое изменение дает совершенно уже какие-то другие цифры. Видимо связано с особенностями самой кодировки таких файлов.
Если же скажем у него сравниваются dbf-ки или другие непакуемые текстовые форматы - ну тут уже конечно, одним сравнением размера никак не обойтись.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)




Исправлено 1 раз(а). Последнее : Crispy, 01.04.21 10:46
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
akvvohinc
А вероятностью какой-то ошибки (например, оборудования), приводящей к разным суммам для одного и того же файла, для "жизненно важных данных" можно пренебречь?
Дублирование, избыточность, распределённые системы, принятие решение на основании голосования (кворум, большинство).

Если у тебя 100 серверов (а лучше 100500) вычисляют этот самый хэш для одного и того-же файла, то вероятность того что все 100 попадут на одну и ту же ошибку оборудования (получат сбой в одном и том же месте этого файла) исчезающе мала.
А если они ещё и считают его используя разные реализации алгоритма хэширования (написанные на разных языках, и сами они работают на разных ОС и даже процессорных архитектурах), то и вероятность "ошибки в говнокоде" сводится к минимуму. А если они считают не 1 хэш а пару десятков, то и вероятность "косяка в матаппарате вычисления хэша" минимизируется.
В общем любой каприз за ваши деньги


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Функция для определения уникальности файла по содержанию.
andreyyyyyy

Сообщений: 9
Дата регистрации: 24.04.2011
Надо же.
Всегда обходился обычным filetostr() с последующим сравнением строк, а тут почитал о нюансах.
Интересно.
Жаль, не все понял (
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика