|
Вопрос # 1 266/ вопрос открыт / |
|
Приветствую, уважаемые эксперты! Хочу написать программу для скачивания файлов из интернета (что-то вроде Download Master). Есть ли в Delphi стандартные компоненты для этого и как с ними работать?
 |
Вопрос задал: 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 дней с момента отправки ответа)
Приложение: Переключить в обычный режим-
-
- function DownloadFile(const Url: string): string;
- var
- NetHandle: HINTERNET;
- UrlHandle: HINTERNET;
- Buffer: array[0..1024] of char;
- BytesRead: cardinal;
- begin
- Result := '';
- NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
-
- if Assigned(NetHandle) then
- begin
-
- UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
-
- if Assigned(UrlHandle) then
-
- begin
- FillChar(Buffer, SizeOf(Buffer), 0);
- repeat
- Result := Result + Buffer;
- FillChar(Buffer, SizeOf(Buffer), 0);
- InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
- until BytesRead = 0;
- InternetCloseHandle(UrlHandle);
- end
- else
- begin
-
- raise Exception.CreateFmt('Cannot open URL %s', [Url]);
- end;
-
- InternetCloseHandle(NetHandle);
- end
- else
-
- raise Exception.Create('Unable to initialize Wininet');
- end;
- ===================================================
-
- uses wininet;
- ...
-
- var
- hSession,hFile:hInternet;
- dwBuffer:array[1..20] of char;
- dwBufferLen,dwIndex:DWORD;
- begin
- Result:=0;
- hSession:=InternetOpen('GetUrlSize',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;
- dwBufferLen:=20;
- if HttpQueryInfo(hFile,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex) then
Result:=StrToInt(StrPas(@dwBuffer));
- if Assigned(hFile) then InternetCloseHandle(hFile);
- InternetCloseHandle(hsession);
- end;
- end;
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 17 января 2008, 09:57
Оценка за ответ: 4
|
Ответ #3. Отвечает эксперт: Вадим К
Здравствуйте, Leonardo!
Не понимаю, для кого я пишу статьи:)
Прям на этом сайте в разделе статьи есть пример, как скачать файл, используя потоки. Также там показано, как сделать прогрессбар. (Скачиваем файлы из интернета)
Также стоит почитать статью о Виртуальный ListView, что бы сделать нормально обновляемый список (вы ведь хотите динамически отображать закачаный объем, проценты)
А такого компонента как "Download Master" в ближайшее время не предвидиться
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 18 января 2008, 22:43
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 11 мая 2010, 10:44; участников в обсуждении: 1.
|
eclipse (статус: Посетитель), 11 мая 2010, 10:44 [#1]:
Пример то есть но вот было бы неплохо организовать в нём докачку!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|