Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 266

/ вопрос открыт /

Приветствую, уважаемые эксперты! Хочу написать программу для скачивания файлов из интернета (что-то вроде Download Master). Есть ли в Delphi стандартные компоненты для этого и как с ними работать?

Leonardo Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Leonardo (статус: Посетитель)
Вопрос отправлен: 16 января 2008, 22:29
Состояние вопроса: открыт, ответов: 3.

Ответ #1. Отвечает эксперт: min@y™

Есть пакет компонентов, поставляемый вместе с Delphi, называется Indy, лежит тут: %Delphi%\Source\Indy\. Инфы по работе с ними в Сети - вагон, причём пол-вагона - на русском языке.
Однако, в инете полно сторонних компонентов, например "Internet component suite" (ICS). Взять можно тут.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 17 января 2008, 08:24
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Leonardo!
Начиная с Internet Explorer 3, Microsoft поддерживает очень полезные API, Wininet. Эти функции позволяют использовать все возможности IE, такие как настройки прокси, кэширование файлов и т.д.
В Примере №1 показано использование этих функций для скачивания файла с нужного URL. Это может быть любой доступный URL, ftp://, http://, gopher://, и т.д. Более подробную информацию об этих функция можно посмотреть в MSDN - Win32 Internet API Functions.

В Примере №2 демонстрируется возможность определения размера файла в интернете.

А также смотрите в атаче статейку «Создаём свой GetRight».
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Приложение:
  1.  
  2.  
  3. function DownloadFile(const Url: string): string;
  4. var
  5. NetHandle: HINTERNET;
  6. UrlHandle: HINTERNET;
  7. Buffer: array[0..1024] of char;
  8. BytesRead: cardinal;
  9. begin
  10. Result := '';
  11. NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  12.  
  13. if Assigned(NetHandle) then
  14. begin
  15.  
  16. UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
  17.  
  18. if Assigned(UrlHandle) then
  19.  
  20. begin
  21. FillChar(Buffer, SizeOf(Buffer), 0);
  22. repeat
  23. Result := Result + Buffer;
  24. FillChar(Buffer, SizeOf(Buffer), 0);
  25. InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
  26. until BytesRead = 0;
  27. InternetCloseHandle(UrlHandle);
  28. end
  29. else
  30. begin
  31.  
  32. raise Exception.CreateFmt('Cannot open URL %s', [Url]);
  33. end;
  34.  
  35. InternetCloseHandle(NetHandle);
  36. end
  37. else
  38.  
  39. raise Exception.Create('Unable to initialize Wininet');
  40. end;
  41. ===================================================
  42.  
  43. uses wininet;
  44. ...
  45.  
  46. var
  47. hSession,hFile:hInternet;
  48. dwBuffer:array[1..20] of char;
  49. dwBufferLen,dwIndex:DWORD;
  50. begin
  51. Result:=0;
  52. hSession:=InternetOpen('GetUrlSize',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  53. if Assigned(hSession) then begin
  54. hFile:=InternetOpenURL(hSession,PChar(URL),nil,0,INTERNET_FLAG_RELOAD,0);
  55. dwIndex:=0;
  56. dwBufferLen:=20;
  57. if HttpQueryInfo(hFile,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex) then Result:=StrToInt(StrPas(@dwBuffer));
  58. if Assigned(hFile) then InternetCloseHandle(hFile);
  59. InternetCloseHandle(hsession);
  60. end;
  61. end;


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 17 января 2008, 09:57
Оценка за ответ: 4

Ответ #3. Отвечает эксперт: Вадим К

Здравствуйте, Leonardo!
Не понимаю, для кого я пишу статьи:)
Прям на этом сайте в разделе статьи есть пример, как скачать файл, используя потоки. Также там показано, как сделать прогрессбар. (Скачиваем файлы из интернета)
Также стоит почитать статью о Виртуальный ListView, что бы сделать нормально обновляемый список (вы ведь хотите динамически отображать закачаный объем, проценты)

А такого компонента как "Download Master" в ближайшее время не предвидиться

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 января 2008, 22:43


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 11 мая 2010, 10:44; участников в обсуждении: 1.
eclipse

eclipse (статус: Посетитель), 11 мая 2010, 10:44 [#1]:

Пример то есть но вот было бы неплохо организовать в нём докачку!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.02 сек.