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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить хеш папки, как лучше вычислить crc сумму папки 
:(
    Опции темы
sergeo
Дата 29.6.2007, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Вот мучаюсь над вопросом синхронизации папок.

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

Если для одного файла понятно надо использовать вычисление crc md5, то для папки не знаю как лучше.
Основная идея такая: получить последовательность байтов всего содержимого папки (не только содержимого файлов, но атрибутов, названий и т.д.). И закриптовать все это с помощью md5. Но как это сделать - не знаю. Может есть другие способы.

И еще вопрос в догонку: насколько уникальным будет данных хеш, и как уменьшить вероятность того, для данного хеша найдется другое исходное содержимое?
PM MAIL   Вверх
stab
Дата 29.6.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



может быть хватит даты последней модификации\создания файлов\подпапок в папке и обойтись без хэшей?


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


Новичок



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

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



Цитата(cully @ 29.6.2007,  12:05)
может быть хватит даты последней модификации\создания файлов\подпапок в папке и обойтись без хэшей?

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

Это сообщение отредактировал(а) sergeo - 29.6.2007, 12:22
PM MAIL   Вверх
stab
Дата 29.6.2007, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



хм.. опиши задачу подробнее, что-то не ясно, и фтп и самба и разные компьютеры. программа сама где будет работать?


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


Новичок



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

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



Дело было так:
Есть клиентские компьютеры и есть самба (то бишь расшаренные папки), возможно будет вместо самбы фтп, но это под вопросом.

Так вот одна из задач проги в том, чтобы получать из какой-либо конкретной папки сервера документы на клиентский компьютер. Все документы получать не хочется, поэтому есть функция синхронизации, которая проверяет время последнего изменения каждого файла, ну и в зависимости от этого копирует, или не копирует этот файл.

Все было бы хорошо, но есть две проблемы:
1) При большом количестве файлов процесс синхронизации с сервером затягивается (для этого собственно и нужен хеш)
2) Время на разных компьютерах бывает разное (видать батарейку на матплате забывают поменять), поэтому бывает, что весь процесс синхронизации летит к чертям.

Собственно идеальным решением было бы синхронизация с предварительным сравнением хеша (который не зависит от времени). А затем, если хеш различный, должна происходить синхронизация. (тоже в идеале не зависящая от времени изменения файлов). Так вот как изменить функцию синхронизации понятно, но вот как подсчитать хеш?

Цитата

программа сама где будет работать?

Будет работать не клиентских компьютерах. (Если, конечно, не забракуют)

PS. Или может не стоит с ошибками времени заморачиваться?

Это сообщение отредактировал(а) sergeo - 29.6.2007, 12:49
PM MAIL   Вверх
stab
Дата 29.6.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(sergeo @  29.6.2007,  16:02 Найти цитируемый пост)
И еще вопрос в догонку: насколько уникальным будет данных хеш, и как уменьшить вероятность того, для данного хеша найдется другое исходное содержимое? 

всё зависит от данных, в общем случае при входных данных одинаковой длинны генерируемых случайно, вероятность совпадения определяется разрядностью хэша, для md5 разрядность = 16 байт = 16 * 8 = 128 бит, вероятность совпадения = 1 / 2^128. вот и прикидывай smile

з.ы. вообще-то по-логике (1 / 2^128)^2.. ;)


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


Эксперт
***


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

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



Цитата(sergeo @  29.6.2007,  16:47 Найти цитируемый пост)
PS. Или может не стоит с ошибками времени заморачиваться?

я бы всё-таки попытался сделать прототип работающий на основе временных данных. если не заработает толком, приходи на форум будем думать ;)

один момент мне не понятен: хэш должен считаться и на сервере и на клиенте перед принятием решения о закачке. т.е. у тебя есть локальный доступ к удалённым, по отношению к клиенту, файлам, но ведь тогда можно организовать на сервере систему с подсчётом версий. при каждом обновлении файла увеличивать счётчик версии на 1, и не мучаться с хэшами. правда это потребует организации базы по файлам и мониторинга поступлений.  smile

Добавлено через 6 минут и 17 секунд
кстати, можно на клиенте хранить время последней модификации файла в оригинальном виде, т.е. по времени удалённого сервера ориентироваться, отпадут проблемы с несинхронными часами.


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


Новичок



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

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



Цитата(cully @ 29.6.2007,  13:08)

я бы всё-таки попытался сделать прототип работающий на основе временных данных. если не заработает толком, приходи на форум будем думать ;)

Нечто работающее уже есть, только пока баги отлавливаю и с потоками мучаюсь (успешно smile ). Но чтоб до конца получилась какая-то версия, нужно разобраться в том, как выполнять синхронизацию.
Цитата(cully @ 29.6.2007,  13:08)

один момент мне не понятен: хэш должен считаться и на сервере и на клиенте перед принятием решения о закачке. т.е. у тебя есть локальный доступ к удалённым, по отношению к клиенту, файлам, но ведь тогда можно организовать на сервере систему с подсчётом версий. при каждом обновлении файла увеличивать счётчик версии на 1, и не мучаться с хэшами. правда это потребует организации базы по файлам и мониторинга поступлений.  smile

На сервере ничего считаться по возможности не должно, поскольку и так бывает достаточно загружен, то есть он служит исключительно для хранения файлов.
А с версиями это идея!!! Надо попробовать, но мне кажется, должно получится!!! 
Правда проблема в том, что программа заточена на то, чтобы работать и без подключения к серверу (используя локальный кеш), и вот надо подумать как там обновлять версии и делать блокировки файлов... Но с этим я разберусь.
Цитата(cully @ 29.6.2007,  13:08)

кстати, можно на клиенте хранить время последней модификации файла в оригинальном виде, т.е. по времени удалённого сервера ориентироваться, отпадут проблемы с несинхронными часами.

Ну вот не хочу к времени привязываться... smile Тем более,что возможна смена серваков.

В общем пока пробую версии настроить, а как сделаю, отпишусь.

PS. Камень с плеч, а то работа с файлам и шифрованием дико вермя отнимает... smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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