Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как програмными средствами сравнить файлы, Как програмнми средствами сравнить файлы 
:(
    Опции темы
tarasD
Дата 21.11.2007, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.5.2007

Репутация: нет
Всего: 1



Как програмными средствами сравнить примерно 50 тисяч файлов на идентичность, при этом размер файла может достигать размеров до 2 ГБ. 


PM MAIL   Вверх
Azzdorf
Дата 21.11.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



каким образом сравнить???
по размеру или есть другие параметры????

---------------------

А мо есть конкретное задание - типа найти пару одинаковых???????

Это сообщение отредактировал(а) Azzdorf - 21.11.2007, 19:00
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
marcusmae
Дата 21.11.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



tarasD, если возможно два варианта идентичны и неидентичны, то считайте с файлов хеш суммы (CRC или MD5) и сравнивайте их - если будут равны, то файлы идентичны.


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Domovik
Дата 22.11.2007, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.7.2007

Репутация: нет
Всего: нет



marcusmae, ну для 50 тыс. файлов делать md5 - это жестоко (особенно если учесть возможный размер файлов). Но похоже это единственный приемлемый метод в данной ситуации (ускоряет сравнение в десятки раз). Просто стоит сначала проверять размеры сравниваемых файлов, так как 10кб тхт файл не может быть идентичен 4Гб iso-образу smile

PS никто не знает, есть ли в .Net средства для получения СRC или MD5? Изначально благодарен за ответ.
PM MAIL   Вверх
stab
Дата 22.11.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



MD5 - System.Security.Cryptography.MD5, CRC вроде нет. В любом случае, я бы ручками их сделал, т.к. у меня большие сомнения в производительности стандартной реализации.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
Azzdorf
  Дата 22.11.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



tarasD было бы проще если бы точнее описал задание - тут бы и исходничек родился, но Domovikпоходу прав, если большой разброс по размеру файлов - я бы разбил файлы на несколько груп по размеру, что-бы оптимизировать в плане скорости

например там файлы до 1000кб
1000кб-10мб
10мб-100мб
выше 100мб

а потом прогнать if-оператором при помощи сравнения with use MD5

думаю так будет быстрееsmile хотя можна и поспорить
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
tarasD
Дата 22.11.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 5.5.2007

Репутация: нет
Всего: 1



Я написал через md5. Программа считает 40 минут 60 тисяч файлов, а надо за 5 минут. Причем я учитивал такой вариант когда два файла за размером не равни, то соответственно  файли не равни.  
PM MAIL   Вверх
Azzdorf
  Дата 22.11.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



попробуй вариант с группами - мож реально поможет(притом что МД5 долго)
может есть смысл до 10 или 100 метров сравнивать по МД5 а после по размеру - должно ускорить (попробуй звять для сравнения только файлы до 10 метров и посмотреть сколько выйдет их сравнение через МД5)

также вопросик какого размера в основном файлы???? и где содержаться файлы и как часто необходимо проводить такое сравнение??? smile 
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
marcusmae
Дата 22.11.2007, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата(tarasD @  22.11.2007,  17:44 Найти цитируемый пост)
Программа считает 40 минут 60 тисяч файлов, а надо за 5 минут.


Узкие места :

1) КОД
Если под .NET пишите, то неудивительно, что медленно. Возьмите какую-нибудь из программок, проверяющих контрольные суммы (коих бесчисленное множество, например, эта) и сравните их скорость со своей программой на каком-нибудь одном файле. Прирост скорости могла бы дать реализация под native С. Если всё грамотно сделать, то ускорение в 8 раз в принципе достижимо smile

2) ДИСК
Магнитные диски работают медленно и, чтобы добиться большего, нужно упорядочивать файлы. Ко множеству мелких файлов долго обращаться по файловой системе. Можно объединить в более крупные архивы (или "непрерывные" файлы другого вида) - возможно, будет жеваться быстрее. Этим или другим образом желательно добиться того, чтобы данные, которые Вы анализируете были бы как можно меньше фрагментированы по диску.


Это сообщение отредактировал(а) marcusmae - 22.11.2007, 21:31


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Azzdorf
Дата 23.11.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



может сделать как на многих крупных серверах - создать файл-регистр, к котором хранить даные о файле (расположение, размер...) и в т.ч. МД5 - у по надобности пробигать и сравнивать???

или общая задача другая????
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
ivashkanet
Дата 23.11.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Azzdorf @  23.11.2007,  11:14 Найти цитируемый пост)
может сделать как на многих крупных серверах - создать файл-регистр, к котором хранить даные о файле (расположение, размер...) и в т.ч. МД5 - у по надобности пробигать и сравнивать???

Да, этот вариант мне тоже по душе.

1) За первый прогон создать "индексный" файл с инфой "файл & размер". 
2) Потом пройтись по файлу и найти группы файлов с одинаковым размером (групп будет не много, потому что почти нереально, чтобы разные файлы содержали одинаковое количество байт).
3) Каждую группу проверить MD5.
PM MAIL WWW ICQ   Вверх
marcusmae
Дата 23.11.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата(ivashkanet @  23.11.2007,  11:26 Найти цитируемый пост)
Да, этот вариант мне тоже по душе. За первый прогон создать "индексный" файл с инфой "файл & размер". 


Хм, не годится : файлы можно будет подменить. По размеру Вы не определите, произошло ли это.


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
ivashkanet
Дата 23.11.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(marcusmae @  23.11.2007,  11:59 Найти цитируемый пост)
файлы можно будет подменить

Это может произойти в любой момент сравнения. Какой бы алгоритм ты ни избрал  smile 

P.S. marcusmae, по контексту понятно, что ты подразумеваешь что-то особенное под "подменить". Только вот я не пробью что smile 
Давай на ты

Добавлено через 42 секунды
Цитата(ivashkanet @  23.11.2007,  11:26 Найти цитируемый пост)
1) За первый прогон создать "индексный" файл с инфой "файл & размер". 

Кста, "файл" спокойно поместится в оперативке
PM MAIL WWW ICQ   Вверх
1stain
Дата 23.11.2007, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



как вариант, если есть сервер с базой данных, занести туда записи для всех контролируемых файлов. При первом прогоне - проверить все фалы на идентичность, поставить отметку в полях "synchronized" & "equal". Далее, на кадой машине, где лежат проверяемые файлы крутицца сервис виндовз, который в рантайме отслеживает изменение файлов с помощью FileSystemWatcher и сбрасывает в базе у записи, соответстующей измененному файлу признак "synchronized". При проведении очередной проверки, проверяем только те записи, у которых сброшен "synchronized" и после проверки опять же его поднимаем...

з.ы. правда, при каждом запуске сервиса, он должен определить, были ли изменены проверяемые файлы за время его (сервиса) простоя

Это сообщение отредактировал(а) 1stain - 23.11.2007, 12:10


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
marcusmae
Дата 23.11.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата(ivashkanet @  23.11.2007,  12:07 Найти цитируемый пост)
marcusmae, по контексту понятно, что ты подразумеваешь что-то особенное под "подменить".


Ну можно, действительно, нехитрым сишным кодом подвинуть дату модификации файлов лет эдак на десять в прошлое или в будущее smile Только зачем? Просто, скажем, какой-нибудь фоновый процесс взял и обновил один из файлов - вот и всё, кэшированные суммы уже не действительны...

Цитата(ivashkanet @  23.11.2007,  12:07 Найти цитируемый пост)
Это может произойти в любой момент сравнения. Какой бы алгоритм ты ни избрал 


Так, и что? = Алгоритм подмену заметит, а твой индексер просто выдаст значение из базы и будет неправ.  Или, как предлагает 1stain, кеширование должно работать в связке с системными сервисами по доступу к файловой системе. Типа, уже почти Windows Vista smile 



--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0931 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.