Модераторы: 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   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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