![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| sergeo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Здравствуйте. Вот мучаюсь над вопросом синхронизации папок.
На текущий момент пытаюсь получить хеш-код папки, зависящий от файлов, подпапок, их содержимого и атрибутов одной папки. Если для одного файла понятно надо использовать вычисление crc md5, то для папки не знаю как лучше. Основная идея такая: получить последовательность байтов всего содержимого папки (не только содержимого файлов, но атрибутов, названий и т.д.). И закриптовать все это с помощью md5. Но как это сделать - не знаю. Может есть другие способы. И еще вопрос в догонку: насколько уникальным будет данных хеш, и как уменьшить вероятность того, для данного хеша найдется другое исходное содержимое? |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
может быть хватит даты последней модификации\создания файлов\подпапок в папке и обойтись без хэшей?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| sergeo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Дело в том, что к дате не хотелось бы привязываться. Во-первых, потому что при копировании файлов на сервер дата изменения приравнивается к дате открытия (или как-то так. Просто кто-то намудрил в настройках самбы Конечно предложенных вариант хорош. Но мне кажется, что использование времени придаст элемент неопределенности... Это сообщение отредактировал(а) sergeo - 29.6.2007, 12:22 |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
хм.. опиши задачу подробнее, что-то не ясно, и фтп и самба и разные компьютеры. программа сама где будет работать?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| sergeo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Дело было так:
Есть клиентские компьютеры и есть самба (то бишь расшаренные папки), возможно будет вместо самбы фтп, но это под вопросом. Так вот одна из задач проги в том, чтобы получать из какой-либо конкретной папки сервера документы на клиентский компьютер. Все документы получать не хочется, поэтому есть функция синхронизации, которая проверяет время последнего изменения каждого файла, ну и в зависимости от этого копирует, или не копирует этот файл. Все было бы хорошо, но есть две проблемы: 1) При большом количестве файлов процесс синхронизации с сервером затягивается (для этого собственно и нужен хеш) 2) Время на разных компьютерах бывает разное (видать батарейку на матплате забывают поменять), поэтому бывает, что весь процесс синхронизации летит к чертям. Собственно идеальным решением было бы синхронизация с предварительным сравнением хеша (который не зависит от времени). А затем, если хеш различный, должна происходить синхронизация. (тоже в идеале не зависящая от времени изменения файлов). Так вот как изменить функцию синхронизации понятно, но вот как подсчитать хеш?
Будет работать не клиентских компьютерах. (Если, конечно, не забракуют) PS. Или может не стоит с ошибками времени заморачиваться? Это сообщение отредактировал(а) sergeo - 29.6.2007, 12:49 |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
всё зависит от данных, в общем случае при входных данных одинаковой длинны генерируемых случайно, вероятность совпадения определяется разрядностью хэша, для md5 разрядность = 16 байт = 16 * 8 = 128 бит, вероятность совпадения = 1 / 2^128. вот и прикидывай з.ы. вообще-то по-логике (1 / 2^128)^2.. ;) -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
я бы всё-таки попытался сделать прототип работающий на основе временных данных. если не заработает толком, приходи на форум будем думать ;) один момент мне не понятен: хэш должен считаться и на сервере и на клиенте перед принятием решения о закачке. т.е. у тебя есть локальный доступ к удалённым, по отношению к клиенту, файлам, но ведь тогда можно организовать на сервере систему с подсчётом версий. при каждом обновлении файла увеличивать счётчик версии на 1, и не мучаться с хэшами. правда это потребует организации базы по файлам и мониторинга поступлений. Добавлено через 6 минут и 17 секунд кстати, можно на клиенте хранить время последней модификации файла в оригинальном виде, т.е. по времени удалённого сервера ориентироваться, отпадут проблемы с несинхронными часами. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| sergeo |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Нечто работающее уже есть, только пока баги отлавливаю и с потоками мучаюсь (успешно
На сервере ничего считаться по возможности не должно, поскольку и так бывает достаточно загружен, то есть он служит исключительно для хранения файлов. А с версиями это идея!!! Надо попробовать, но мне кажется, должно получится!!! Правда проблема в том, что программа заточена на то, чтобы работать и без подключения к серверу (используя локальный кеш), и вот надо подумать как там обновлять версии и делать блокировки файлов... Но с этим я разберусь.
Ну вот не хочу к времени привязываться... В общем пока пробую версии настроить, а как сделаю, отпишусь. PS. Камень с плеч, а то работа с файлам и шифрованием дико вермя отнимает... |
||||||
|
|||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |