![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здраствуйте все!
У меня такой вопрос... Помогите составить код, я хочу чтобы при нажатии кнопки у меня проверял фаил на сервере 'URL' и если есть нужный ему фаил она (программа) скачивала этот фаил у меня и потом делала следующий действия (я их уже написал), а если нету файла то он выдавал новую форму (Form 5) с предупреждением что файла нету. Можете мне составить код и прокоментировать? Буду очень благодарен! |
#2
|
|||
|
|||
![]() Для решения задачи необходимо проверить существование опрделенного адреса(URL) в интернете:
Код:
uses wininet; function CheckUrl(url: string): boolean; var hSession, hfile, hRequest: hInternet; dwindex, dwcodelen: dword; dwcode: array [1..20] of char; res: pchar; begin if pos('http://', lowercase(url)) = 0 then url := 'http://'+url; Result := false; hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if assigned(hsession) then begin hfile := InternetOpenUrl(hsession, pchar(url), nil, 0, INTERNET_FLAG_RELOAD, 0); dwIndex := 0; dwCodeLen := 10; HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex); res := pchar(@dwcode); result := (res = '200') or (res = '302'); if assigned(hfile) then InternetCloseHandle(hfile); InternetCloseHandle(hsession); end; end; Эта функция проверяет только два возвращаемых кода '200'(ОК) или '302' (Редирект), но Вы можете заставить проверять функцию и другие коды. Для этого достаточно модифицировать строчку "result := ". Теперь мы знаем что файл существует... Значит загружаем ![]() Код:
function GetInetFile(const fileURL, FileName: string): boolean; const BufferSize = 1024; var hSession, hURL: HInternet; Buffer: array[1..BufferSize] of Byte; BufferLen: DWORD; f: file; sAppName: string; begin Result := False; sAppName := ExtractFileName(Application.ExeName); hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0); try AssignFile(f, FileName); Rewrite(f,1); repeat InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); BlockWrite(f, Buffer, BufferLen); until BufferLen = 0; CloseFile(f); Result := True; finally InternetCloseHandle(hURL); end; finally InternetCloseHandle(hSession); end; end; ну вот в общем и вся примудрость... правдо все корявенько малех... но за то рботает... сам проверял ![]() |
#3
|
|||
|
|||
![]() Ой как спасибо! Вы гений!
Тока у меня небольшой вопрос, перед вторым кодом в Uses Нада чтото дописывать? а то у меня когда пытается второй код проверять выдает ошибку на Function Последний раз редактировалось AkaruZ, 05.02.2009 в 15:19. |
#4
|
|||
|
|||
![]() хм... не должен... может ты какую ниюудь квычку или точку с запятой пропустил
Кто знал, тот знал точно. Кто не любит свет, тот и живет ночью. |
#5
|
|||
|
|||
![]() Ну я как бы скопировал твой текст и пропустить не мог
![]() |
#6
|
|||
|
|||
![]() Можеш сказать свой ICQ? Ты мне объясниш немнога поподробнее
![]() |