Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение файла из сети 
:(
    Опции темы
Alex
Дата 6.11.2004, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



(Перевод одноимённой статьи с сайта delphi.about.com ) 

Обычно при разработке приложений, которые планируется в дальнейшем обновлять и усовершенствовать, основные модули хранятся в виде пакетов (Package) или библиотек DLL. В настоящее время Internet предоставляет возможность без особых усилий осуществлять обновление этих модулей. Поэтому добавление к Вашему приложению функции авто-обновления, является наилучшим способом для обновления приложения. 

Давайте посмотрим, как реализовывается данный механизм в любом FTP приложении. 

Delphi предоставляет нам полный доступ к WinInet API (wininet.pas), который можно использовать для соединения и получения файлов с веб-сайта, который использует либо Hypertext Transfer Protocol (HTTP) либо File Transfer Protocol (FTP). Например, мы можем использовать функции из WinInet API для: добавления FTP браузера в любое приложение, создания приложения, которое автоматически скачивает файлы с общедоступных FTP серверов или поиска Internet сайтов, ссылающихся на графику и скачивать только графику. 

Функция GetInetFile 

Код

uses Wininet; 

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; 


Обратите внимание: Чтобы обеспечить некоторую визуальную обратную связь для пользователя, Вы можете добавить строчку наподобие FlashWindow(Application.Handle,True) в тело блока "повторить/до тех пор" (repeat/until). Вызов FlashWindow API высвечивает заголовок Вашего имени приложений в панели задач. 

Использование 
Для вызова функции GetInetFile можно использовать следующий код: 

Код

var FileOnNet, LocalFileName: string 
begin 
 FileOnNet:= 
  'http://delphi.about.com/library/forminbpl.zip'; 
 LocalFileName:='File Downloaded From the Net.zip' 

 if GetInetFile(FileOnNet,LocalFileName)=True then 
  ShowMessage('Download successful') 
 else 
  ShowMessage('Error in file download') 
end;
 

Данный код запрашивает файл 'forminbpl.zip' с сайта, скачивает его, и сохраняет его как 'File Downloaded From the Net.zip'. 

Обратите внимание: В зависимости от версии Delphi, Вы можете использовать различные компоненты, которые можно найти на Интернет страницах, посвещённых VCL и, которые можно использовать для упрощения создания приложений (например FTP компонент, необходимый для TNMFTP, находящийся на странице FastNet VCL). 


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

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


 




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


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

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