Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Взаимодействие 2 компьютеров, организовать одинаковые каталоги на 2 ко 
:(
    Опции темы
seravr
Дата 27.2.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приветствую Всех участников форума!

Я не профессиональный программист, скажем, любитель(по профессии-я не айтишник).
Пришла в голову такая идея.
Дома есть два компьютера, я хочу написать программу, которая отслеживает изменение файлов(например, на диске D) на обоих компьютерах, для того, чтобы у обоих компьютеров какой-либо каталог(или целый диск, где не установлен Windows) был одинаков, т.е. чтобы, например, одновременно работать с одним и тем же,но на разных компьютерах. Идея заключается в том, чтобы написать программу, которая будет заниматься отслеживанием появления новых файлов, удаления каких-либо файлов, или изменением существующих файлов. И как только что-либо изменилось на одном компьютере, тут же делать изменения на другом(чтобы на обоих компьютерах было все одинаково). Пока в голову приходит следующий алгоритм:
На компьютерах работает программа(со временем ее можно и в автозапуск), которая "слушает" некий диск или какой-нибудь корневой файл. эта программа(у каждого компьютера она своя) записывает, например, в файл статистику того, что там храниться(например, полный путь всех файлов и размер каждого файла) и с определенным интервалом обменивается статистикой с другим компьютером, у которого тоже своя статистика, и программа сравнивает эти статистики, как только что-либо изменилось, тут же происходит добавление/удаление/изменение каких-либо файлов, например, по TCP(кстати, обмен статистикой тоже происходит по этому же протоколу). Вот пока в принципе что придумал с алгоритмом. Надеюсь, суть Вам ясна.
Писать хочу на C/C++.

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

Ввиду того, что каждая программа на каждом компьютере, по-сути, только и занимается сравнением файлов статистики(путь к файлу и его размер), то программы скорее всего очень долго будут работать. К тому же как правильно сравнивать файлы( по директории и по размеру- этого будет достаточно???)
С каким оптимальным интервалом делать опрос???

Скажем, обменяться по TCP текстомым файлов статистики недолго и быстро, но возникает проблема, если скажем выяснилось, что на одном компьютере есть файл объемом 300 мегабайт, то разумно его передавать другому компьютеру по TCP???

Вообщем, пока все что я хотел сказать, надеюсь, Вам понятно что я хочу сделать.
Ребята, выскажитесь пожалуйста кто как думает. Мнение каждого очень ценю.
Заранее всем благодарен.
Если кто хочет-присоединяйтесь-будем вместе писать(пишите в личку)
PM MAIL   Вверх
Lazin
Дата 27.2.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



судя по теме про указатели, тебе еще рано ставить перед собой такие задачи smile 
к тому-же зачем изобретать велосипед, если можно использовать windows live mesh или dropbox

Добавлено @ 11:04
Цитата(seravr @  27.2.2009,  09:54 Найти цитируемый пост)
как Вы считаете, оптимален ли вышесказанный алгоритм

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

Это сообщение отредактировал(а) Lazin - 27.2.2009, 11:05
PM MAIL Skype GTalk   Вверх
seravr
Дата 27.2.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



По поводу рано или нет мне браться за такую задачу-не согласен, лучше писать что-то одно и набираться опыту.
Lazin, не можете поподробнее пожалуйста рассказать что такое хэш и diff
PM MAIL   Вверх
cutwater
Дата 27.2.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

не можете поподробнее пожалуйста рассказать что такое хэш и diff

seravr, я боюсь что если не уметь пользоваться google, и не найти самостоятельно что это такое, то браться за такой проект действительно рано и бессмысленно.

Вот Вам по хешированию
http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%...%BD%D0%B8%D0%B5
и по diff
http://ru.wikipedia.org/wiki/Diff

Добавлено @ 12:14
Lazin, имхо для больших бинарных файлов diff можно и не использовать, как считаете? Если большой файл скажем больше сотни мб, то весьма мала вероятность того что он будет изменен, поэтому разумно хранить только хеш и при его изменении передавать возможно стоит полностью весь.

Это сообщение отредактировал(а) cutwater - 27.2.2009, 12:14


--------------------
user posted image
PM MAIL   Вверх
seravr
Дата 27.2.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(cutwater @ 27.2.2009,  12:08)
seravr, я боюсь что если не уметь пользоваться google, и не найти самостоятельно что это такое, то браться за такой проект действительно рано и бессмысленно.

Спасибо, дело не в том что не умею, просто на самом деле не знаю что искать, что это такое(я имею вышесказанное)
PM MAIL   Вверх
cutwater
Дата 27.2.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(seravr @  27.2.2009,  12:21 Найти цитируемый пост)
Спасибо, дело не в том что не умею, просто на самом деле не знаю что искать, что это такое(я имею вышесказанное) 


Google те две ссылки что я дал, находит запросам
хеш и diff, взятые из
Цитата(Lazin @  27.2.2009,  10:00 Найти цитируемый пост)
нет, хранить нужно не только путь и размер, но и хэш, а так-же при каждом изменении файла, рассчитывать diff, по которому можно получить предыдущее состояние файла, так-же нужно передавать по сети не весь файл, а только изменившуюся часть


Это я к чему....

seravr, старайтесь больше полагаться на собственные силы, и будет Вам тогда польза.



Это сообщение отредактировал(а) cutwater - 27.2.2009, 21:00


--------------------
user posted image
PM MAIL   Вверх
seravr
Дата 28.2.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



cutwater, спасибо,  ну а вообще, я в правильном направлении (в плане алгоритма), может как то это по-другому люди делают???
А хеши соответственно для каждого файла делать и придется наверное делать многопотоково
PM MAIL   Вверх
Lazin
Дата 28.2.2009, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(seravr @  28.2.2009,  14:03 Найти цитируемый пост)
делать многопотоково 

это то-же еще рано, ИМХО))
PM MAIL Skype GTalk   Вверх
Rififi
Дата 28.2.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



seravr
эту задачу можно решить на winapi (ReadDirectoryChangesW), если на втором компьютере использовать расшаренный ресурс. Программа будет работать на первом компе и сливать по сети изменения на второй. на C# задача решается проще, ввиду наличия готового класса (DirectoryWatcher или как-то так)
PM MAIL   Вверх
seravr
Дата 28.2.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Lazin, что же мне писать, что не спрошу- у Вас все рано!?
Рано-не рано, может вообще ничего не писать!!!
или делать задачки по типу лабораторок!!!
Надо же с чего то начинать!!!

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(seravr @  28.2.2009,  16:58 Найти цитируемый пост)
или делать задачки по типу лабораторок!!!

да, с этого и нужно smile 
PM MAIL Skype GTalk   Вверх
seravr
Дата 28.2.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Lazin, я вообще создал этот топик чтобы посоветоваться по поводу алгоритма, а что мне делать я и сам разберусь, если не хотите писать по теме, то не надо флудить
PM MAIL   Вверх
Lazin
Дата 28.2.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(seravr @  28.2.2009,  19:13 Найти цитируемый пост)
Lazin, я вообще создал этот топик чтобы посоветоваться по поводу алгоритма, а что мне делать я и сам разберусь, если не хотите писать по теме, то не надо флудить 

я уже описал, что должен делать алгоритм, по сути твоя программа должна быть распределенной системой версионного контроля, я бы не взялся такое писать ))
по другому не получится, например есть 2 компа, А и Б, и твоя программа контролирует только один файл, допустим я изменяю файл на компьютере А, как программа на компьютере А поймет, что файл изменился и его нужно синхронизировать, а как она поймет что нужно сделать, загрузить данные с компьютера Б, или наоборот изменить файл на компьютере Б?
в принципе можно сделать это просто, достаточно мониторить деректорию и при изменении ее состояния отправлять данные на другой комп полностью, но что будет, если файл будет изменен до того, как программа будет запущена, либо если на 2х машинах системное время отличается? smile 
PM MAIL Skype GTalk   Вверх
vinick
Дата 28.2.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(seravr @  27.2.2009,  09:54 Найти цитируемый пост)
Как Вы считаюте, как вообще правильно это организовать что-либо подобное.

В случае если оба компьютера равноправны - задача не имеет смысла. В этом случае оба диска очень быстро превратятся в кашу.
Если же просто зеркалировать один диск на другой, то отслеживать изменения в реальном времени ИМХО не нужно, а может быть и опасно.
Тут наиболее действенным методом является тупое копирование с заменой в моменты когда с зеркалируемым диском не происходит никаких операций. Ну а если очень хочется что-то написать. Можно посмотреть на внутреннее устройство rsync. там как раз и хэши используются и передача файлов по сети.
PM MAIL ICQ Jabber   Вверх
seravr
Дата 28.2.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Lazin, vinick спасибо огромное, не все так просто как мне казалось.
Сейчас думаю сделать так: писать программу сервер, он поочередно опрашивает свой компьютер(т.е. где запущен, соответственно, на этом же компе будет одна клиентская прога), и по сетке другой комп. Тобиш, получается 2 клиента. Сервер содержит файл, в котором есть информация о хранимых файлах в определенной директории и поочередно с некоторым интервалом запрашивает у клиентов такой же файл, который на каждом компьютере поддерживает соотв. программа-клиент и сравнивает хранимые директории файлов и информацию о них. Как только сервер определит, что файл, полученный от клиента, имеет какие то различия с тем файлом, который имеет сервер, сервер после некоторых определенных проверок добавляет инфу об изминениях в свой файл и запрашивает у этого клиента(у которого сервер нашел изминения ) этот/эти   файлы и отправляет другому клиенту, который копирует принятый в файл в такую же директорию, Вообщем, так до бесконечности, сервер просто работает и сравнивает инфу на разных компах.
Тут как бы возникает три варианта:
1)какой-либо файл был изменен: вот в этом случае наиболее подходит предложенный Вами вариант с кешированием, когда передается вна другой комп добавленная/ удаленная инфа из файла
2)на одном компе создали фай-в таком случае сервер отправляет тупо на другой комп копию данного файла
3)какой-либо файл удален-тогда сервер тупо отсылает "команду" другому компу удалить такой же файлть

Как считаете, можно так сделать?
И мучаюсь с такими вопросами сейчас:
1) какую достаточно  серверу хранить информацию о каждом файле, т.е. вообщем, он 100% должен содержать полный путь к файлу, его размер, и еще что-то, но никак не пойму.Вы говорили на счет хеширования, а как его применить-почитал статьи в интернете- ничего не понял.
И как можно не применяя стандартных функций, определить для конкретной папки директории для хранимых файлов в этой папке и других подпапках

Друзья, подскажите пожалуйста по этим вопросам
PM MAIL   Вверх
pan2004
Дата 28.2.2009, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



еще ответь на вопрос, что делать когда один файл изменяется одновременно на (попростому) двух компьютерах?


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
jonie
Дата 28.2.2009, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



/me вспоминает ужасы пятничного merge-а...

простого SVN\perforce\mercurial\etc. недосточно чтоли?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Remiznik
Дата 28.2.2009, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а что если просто хранить время последнего изменения ?  если на какойто машине время больше то эту версию нужна перекинуть на другую ... ну это для не больших машин ! 
вы ведь будете дома пользаватся а время на компах одинаковое ))
PM MAIL   Вверх
inside_pointer
Дата 1.3.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



seravr, а ты не пробовал что-нибудь вроде сетевого диска ?
PM MAIL   Вверх
seravr
Дата 1.3.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(inside_pointer @ 1.3.2009,  01:01)
seravr, а ты не пробовал что-нибудь вроде сетевого диска ?

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

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

Добавлено через 1 минуту и 16 секунд
Цитата(pan2004 @ 28.2.2009,  22:46)
еще ответь на вопрос, что делать когда один файл изменяется одновременно на (попростому) двух компьютерах?

Да, вот с этим то как раз проблема
PM MAIL   Вверх
Lazin
Дата 1.3.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(seravr @  1.3.2009,  10:44 Найти цитируемый пост)
А по поводу хранения времени изминения, это хорошо

это не будет работать, так-как время на 2х компьютерах может быть разным

Добавлено через 2 минуты и 59 секунд
Цитата(jonie @  28.2.2009,  23:50 Найти цитируемый пост)
/me вспоминает ужасы пятничного merge-а...

простого SVN\perforce\mercurial\etc. недосточно чтоли? 

самый веслелый merge бывает в понедельник...
в принципе можно скрипт написать, который будет использовать git, mercurial или bazaar для управления изменениями
PM MAIL Skype GTalk   Вверх
cutwater
Дата 1.3.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Lazin @  1.3.2009,  10:48 Найти цитируемый пост)
в принципе можно скрипт написать, который будет использовать git, mercurial или bazaar для управления изменениями 


И от себя добавлю, что это было бы достаточно неплохой идеей чем писать свой.



--------------------
user posted image
PM MAIL   Вверх
seravr
Дата 1.3.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ребята, а сложно написать батник, который бы выводил скажем в лог-файл директории всех файлов и файлов подпапок, информацию о размере и последнем изминении файла???
Чего посоветуете почитать???
PM MAIL   Вверх
seravr
Дата 2.3.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



алгоритм по сравнению файлов с информацией о всех файлах не подходит(так можно сделать только на начальной стадии)-уходит много времени и мне кажется, так не делают.Скажем, написал простенький класс, который в файл пишет по заданной директории всю информацию о хранимых там файлах(вообщем, в файл вывожу _finddata_t для каждого файла). Получается, например, для моего диска d:\ этот файл весит порядка 20 метров, и этот файл придется передать серверу, который будет сравнивать инфу о файлах, кот. пришла от клиента, и искать что нового там(на клиентском узле) произошло, и делать соответствующие решения- на это потратиться очень много времени. Вообщем, я в тупике, посоветуйте что можно сделать, очень Вас прошу
PM MAIL   Вверх
Anikmar
Дата 2.3.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(seravr @  2.3.2009,  22:58 Найти цитируемый пост)
Вообщем, я в тупике, посоветуйте что можно сделать, очень Вас прошу 


Все варианты вижу глючными и сложными. Простейший пример: На двух компах одна и таже табличка с домашними финансами. Муж правит на своей машине доходы, а жена расходы. Оба сохраняются. Чей вариант победит?

Вариант1:
Быстро и радикально.
Ставить в квартиру третий комп, расшаривать на нем диск и работать только по сетке.  smile 

Вариант2:
Поставить серверную СУБД и все файлы держать в ней. Доступаться только с помощью своих клиентских приложений.  smile 



PM MAIL ICQ   Вверх
inside_pointer
Дата 3.3.2009, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Это сообщение отредактировал(а) inside_pointer - 3.3.2009, 00:20
PM MAIL   Вверх
seravr
Дата 3.3.2009, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Lazin @ 27.2.2009,  11:00)
нет, хранить нужно не только путь и размер, но и хэш, а так-же при каждом изменении файла, рассчитывать diff, по которому можно получить предыдущее состояние файла, так-же нужно передавать по сети не весь файл, а только изменившуюся часть

Lazin, как Вы считаете, какой алгоритм хеширования подойдет?
И как можно узнать что какой - либо файл изменился?

Добавлено через 6 минут и 43 секунды
Цитата(Anikmar @ 2.3.2009,  23:58)
Цитата(seravr @  2.3.2009,  22:58 Найти цитируемый пост)
Вообщем, я в тупике, посоветуйте что можно сделать, очень Вас прошу 


Все варианты вижу глючными и сложными. Простейший пример: На двух компах одна и таже табличка с домашними финансами. Муж правит на своей машине доходы, а жена расходы. Оба сохраняются. Чей вариант победит?

Вариант1:
Быстро и радикально.
Ставить в квартиру третий комп, расшаривать на нем диск и работать только по сетке.  smile 

Вариант2:
Поставить серверную СУБД и все файлы держать в ней. Доступаться только с помощью своих клиентских приложений.  smile

Вообще, мне лучше упростить и сделать вот как: пусть мой комп будет типа главным, а на другой я буду просто зеркалировать файлы, т.е. на другом компе другие люди просто могут иметь доступ и просматривать содержимое каталога.
Тогда наверное, попроше будет
PM MAIL   Вверх
Anikmar
Дата 3.3.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(seravr @  3.3.2009,  00:17 Найти цитируемый пост)
Вообще, мне лучше упростить и сделать вот как: пусть мой комп будет типа главным, а на другой я буду просто зеркалировать файлы, т.е. на другом компе другие люди просто могут иметь доступ и просматривать содержимое каталога.
Тогда наверное, попроше будет 


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

А в ситуации синхронизации файлов в домашней сетке - тут необходимы организационные методы:

1. Количество файлов, которые реально необходимо зеркалить на практике не превышет нескольких штук. Лично у меня - это 2 файла - мультимедиа каталог и записная книжка.
С обоими я поступил методом хранения на одном компе.

В ситуации, когда необходимо поработать на своем компе при выключенном первом - дейтсвую методом переноса через флешку, причем именно переноса, а не копирования. Поработал - вернул на место. Синхронизировать копии - дело чреватое глюками и ошибками. ИМХО.
PM MAIL ICQ   Вверх
cutwater
Дата 3.3.2009, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Anikmar @  2.3.2009,  23:43 Найти цитируемый пост)
Просто расшарьте диск и общие файлы пусть с вашего компа берут.
На самом деле задача не такая уж и безумная - когда мне по работе нужно было таскать проект с работы домой и обратно у меня была мысль написать такой синхронизатор, стандартный виндовский кейс мне не понравился.
Но поразмыслив денек над сложностью я отказался - задача решаема, но не в 5 минут.


В случае исходных кодов очень подойдет децентрализованная система контроля версий, обычно я в таких случаях и использую git или mercurial

а в остальных действительно необходиомсти и необходимости поиска другого решения окромя контроля версий не возникало.

опять же имхо.


--------------------
user posted image
PM MAIL   Вверх
Anikmar
Дата 3.3.2009, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(cutwater @  3.3.2009,  01:47 Найти цитируемый пост)
 обычно я в таких случаях и использую git или mercurial


Надо будет глянуть на досуге. Может это то, что мне надо, не слышал ранее.
PM MAIL ICQ   Вверх
seravr
Дата 3.3.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

Друзья, кто нибудь может помочь разобраться с хешированием и diff?
PM MAIL   Вверх
ir4y
Дата 3.3.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



(оффтоп) 
Я конечно понимаю желание разобраться с программированием и стать реально крутым меном у seravr'а
но пытаться воротить какие то адские программы типа сетевой синхронизации винтов это полный бред(извиняюсь за жесткость высказывания)
raid0, а тут именно что то подобное человек сделать пытается, по сети в 100Мб не синхронизуешь нормально....
если конечно у него не 10Гб оптика между компами проложена.....

практически половина сообщений в теме полный оффтоп, в связи с некомпитентностью топикстартера =(

(не оффтоп)
при таком подходе
Цитата

делать общую копию по последнему именению

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

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

по поводу diff
качаешь
http://gnuwin32.sourceforge.net/packages/diffutils.htm
устанавливаешь

в программе своей exec'аешь diff 
через api или перенаправление в файл получаешь вывод программы....

если хочешь оптимизировать качаешь исходники и вкручиваешь необходимые функции в свой код

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


Это сообщение отредактировал(а) ir4y - 3.3.2009, 10:39
PM MAIL   Вверх
seravr
Дата 3.3.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ir4y, спасибо Огромное, пойду разбираться
PM MAIL   Вверх
Vaulter
Дата 3.3.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

rsync — (англ. Remote Synchronization) это программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. Важным отличием rsync от многих других программ/протоколов является то что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.

Алгоритм

Утилита rsync использует алгоритм, разработанный австралийским программистом Эндрю Триджеллом, для эффективной передачи структур (например файлов) по коммуникационным соединениям в том случае, когда принимающий компьютер уже имеет отличающуюся версию этой структуры.

Принимающий компьютер разделяет свою копию файла на неперекрывающиеся куски фиксированного размера S, и вычисляет контрольную сумму для каждого куска: MD4 хэш и более слабый 'rolling checksum', и отправляет их серверу, с которым синхронизируется.

Сервер, с которым синхронизируются, вычисляет контрольные суммы для каждого кусочка размера S в своей версии файла, в том числе перекрывающиеся куски. Это может быть эффективно подсчитано ввиду особого свойства rolling checksum: если rolling checksum байт от n до n+S-1 равняется R, то rolling checksum байт от n+1 до n+S может быть посчитана исходя из R, байта n и байта n+S без необходимости учитывать байты, лежащие внутри этого интервала. Таким образом, если уже подсчитана rolling checksum байт 1-25, то для подсчета rolling checksum байт 2-26 используется предыдущая контрольная сумма и байты 1 и 26.


http://ru.wikipedia.org/wiki/Rsync

Open source:

http://samba.anu.edu.au/ftp/unpacked/rsync/
http://samba.anu.edu.au/ftp/rsync/




--------------------
PM MAIL WWW ICQ   Вверх
seravr
Дата 3.3.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Vaulter, спасибо!!!

ir4y, спасибо, разобрался с md5

Как Вы думаете, вот "просканировал" я каталог, который хочу "зеркалировать", для каждого файла получил хеш, но ведь этим только  я смогу отслеживать изминения внутренней как бы структуры файла, но ведь этого недостаточно, в принципе можно для каждого файла записывать структуру _finddata_t, но размер этой структуры 296 байт(хотя странно, если посмотреть в io.h, то там взглянуть на структуру _findata_t, то на самом деле объет этого типа должен занимать 292 байта, почему у меня sizeof(обект типа _findata_t) занимает 296 байт, вообщем странно, может "дыры" сказываются или указатель там еще есть, вообщем-непонятно ), т.е. вообщем, для любого файла(причем, не важно какой это файл, я имею ввиду размер, то ли он будет равен 1 байту или 100 мб- для каждого из них информация будет весить = sizeof(_findata_t) +хеш ) .
Вобщем, как Вы думаете, что оптимально хранить в информации о конкретном файле, как Вы считаете?

вот пример из описания структуры _findata_t(у меня 32 разрядная система, и вижал студия применяет именно вот эту структуру)
Код


struct _finddata64i32_t {
        unsigned    attrib;
        __time64_t  time_create;    /* -1 for FAT file systems */
        __time64_t  time_access;    /* -1 for FAT file systems */
        __time64_t  time_write;
        _fsize_t    size;
        char        name[260];
};

PM MAIL   Вверх
seravr
Дата 6.3.2009, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Друзья, выскажитесь пожалуйста кто как думает по поводу вышесказанного мною
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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