C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как обнаружить обновление и скачать его ???, Прошу помочь как можно скорее !!!!
Aptem
  Отправлено: 10.08.2004, 09:08


Мастер участка

Группа: Участник
Сообщений: 349



Привет, ВСЕМ !!!

У меня такая проблема:

Есть приложение на C++Builder, которое находится на локальной машине. Суть его заключается в том, что оно грузит из файла какие-то данные, неважно какие... Так вот вопрос в том, что этот файл необходимо обновлять. Мне нужно, что бы при каждом запуске приложения, оно автоматически связывалось с сервером в Интернет и если файл на сервере более новый, чем на локальной машине, приложение обновляло бы свой старый файл!

Мне необходимо просто узнать механизм проверки файла на "обновленность" и механизм закачки его с сервера web!

Прошу помочь как можно скорее. ОГРОМНОЕ спасибо за внимание.
AVC
Отправлено: 10.08.2004, 09:37


Ветеран

Группа: Модератор
Сообщений: 1583



Закачку с web не подскажу, а по поводу обновляемости использую в рамаках локальной сети следующий алгоритм (работаю с БД, поэтоме есть где хранить настройки способов обновлений для каждой станции):
1. Старт приложения
2. Коннект к БД
3. Проверка для данного компа где проверять обновления (на файл сервере, по ftp или прямо из базы)
4. Получение информации об эталонных файлах
5. Сравнение каталога приложения с эталонным набором
6. Если есть новые файлы или даты больше (не равны) эталону — нужен Upgrade
7. Формирование командной строки, запуск программы выполняющей обновление и останов основного процесса.
8. Приложение выполняющее Upgrade
8.1. Ожидание останова основного приложения.
8.2. Копирование или иным способом получение файлов эталона и запись их на локальную машину
8.3. Рестарт основного приложения.
go to 1.
Aptem
Отправлено: 10.08.2004, 14:04


Мастер участка

Группа: Участник
Сообщений: 349



Как скачать файл с сервера я уже понял:
CODE

NMHTTP1 -> InputFileMode = true;
NMHTTP1 -> Body = "catalogue.txt";
NMHTTP1 -> Get ( "http://www.mysite/catalogue.txt" );


Но вот как проверить файл на "обновленность"? Может сравнивать время создания файлов? Например, при каждом обновлении сохраняем дату создания файла на сервере, а затем проверяем это время.

Что думаете? Как проверить дату создания файла на сервере?
AVC
Отправлено: 10.08.2004, 14:49


Ветеран

Группа: Модератор
Сообщений: 1583



Например:
Дата_Время_создания_файла = TDateTime(double(FileDateToDateTime(sr.Time)));
гда TSearchRec sr результат FindFirst/FindNext
или
TDateTime stime = FileDateToDateTime(FileAge(fspec));

Отредактировано AVC — 10/08/2004, 14:55
Gedeon
Отправлено: 10.08.2004, 15:01


Ветеран

Группа: Модератор
Сообщений: 1742



Сравнивать надо не дату создания, а версию файла, м.б. разные приколы с датой, это 1, а второе, сначала скачали, а потом проверили? очень быстро и трафика не жалко? по любому где-то до закачки д.б. версия файла, где ее можно прочитать.
Guest
Отправлено: 10.08.2004, 15:25


Не зарегистрирован







"Приколы с датой" имеют место быть (решаемые). Версию найти не смог. Сначала гружу описания, сравниваю, затем гружу требуемые файлы. Можно создать на сервере файл с номером версии и сначала читать его.
(avc)
Aptem
Отправлено: 11.08.2004, 06:22


Мастер участка

Группа: Участник
Сообщений: 349



Всем спасибо за ответы...

Если файл сначала загрузить с сервера, то дата его создания устанавливается дате его скачки и проверять уже нет смысла. Если хранить постоянно где-то в другом файле версию, то при очередном обновлении можно просто забыть обновить файл с версией и приложение не обновится!
Guest
Отправлено: 11.08.2004, 08:42


Не зарегистрирован







Что бы не забывать обновлять файл с версией этот процесс обязательно должен быть автоматизирован.
Aptem
Отправлено: 11.08.2004, 08:58


Мастер участка

Группа: Участник
Сообщений: 349



QUOTE (Guest @ 11/08/2004, 09:44)
Что бы не забывать обновлять файл с версией этот процесс обязательно должен быть автоматизирован.

Ну это уже дебри web-программирования! Хотя наверное, так будет проще...
Guest
Отправлено: 11.08.2004, 09:18


Не зарегистрирован







Почему Web? Его можно готовить у вас перед выкладыванием на Web сервер. Кроме версии в нем можно хранить описания эталона поставки. Тогда закачиваем сначала его, находим какие компоненты надо поменять и качаем только их.
MDM
Отправлено: 12.08.2004, 08:51


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (Aptem @ 10/08/2004, 15:06)
Как скачать файл с сервера я уже понял:
CODE

NMHTTP1 -> InputFileMode = true;
NMHTTP1 -> Body = "catalogue.txt";
NMHTTP1 -> Get ( "http://www.mysite/catalogue.txt" );


Но вот как проверить файл на "обновленность"? Может сравнивать время создания файлов? Например, при каждом обновлении сохраняем дату создания файла на сервере, а затем проверяем это время.

Что думаете? Как проверить дату создания файла на сервере?

Посмотри метод Head(). Может найдешь чего полезного...

Вернуться в Вопросы программирования в C++Builder