Загружать файлы с помощью C++ Builder очень просто, мы рассмотрим один из способов загрузки файлов из интернета. Все, что нам понадобиться, новый проект компонент IdHTTP (вкладка Indy Clients) и любой обработчик событий, например Button. Так же я покажу как отображать процесс загрузки файла, с помощью ProgressBar.
Создаем пустой проект, добавляем на форму компонент IdHTTP (вкладка Indy Clients), Button и в обработчик события OnClick пишем:
URL_DOWNLOAD = " http://ardownload.adobe.com/pub/adobe/reader/win/10.x/10.0.1/en_US/AdbeRdr1001_en_US.exe";
FILE_NAME = "AdbeRdr1001_en_US.exe";
Так же можно создать функцию для автоматического определения названия файла ...
Запускаем программу, нажимаем на кнопку, если все заработало, программа повиснет. И будет висеть до завершения загрузки. Но есть способ обойти зависание и в этом нам поможет компонент IdAntiFreeze (вкладка Indy Misc), добавляем компонент на форму и тестируем нашу программу. Если все заработало, отобразим процесс загрузки. Добавим компонент ProgressBar (вкладка Win32). Теперь создадим два обработчика событий для компонента IdHTTP, первый - OnWorkBegin
Создаем пустой проект, добавляем на форму компонент IdHTTP (вкладка Indy Clients), Button и в обработчик события OnClick пишем:
// Указываем URL адрес файла в интернете UnicodeString URL_DOWNLOAD =""; // Под каким названием сохраниться загруженный файл UnicodeString FILE_NAME = ""; // Создаем указатель на поток для работы файлами // Ключ fmCreate - означает, что будет создан новый (пустой) файл, если файл с указанным названием уже существует, он будет открыть в режиме чтения. А ключ fmOpenWrite - откроет файл для записи. TFileStream* FILE_STREAM = new TFileStream(FILE_NAME, fmCreate | fmOpenWrite); // Отправляем запрос GET на указанный URL с файлом, если сервер нам вернет ответ // Пустой файл будет занимать столько же места, сколько и загружаемый файл, но в процессе загрузки он будет постепенно дописываться IdHTTP1->Get(URL_DOWNLOAD, FILE_STREAM); // После завершения загрузки, освобождаем память delete FILE_STREAM;Теперь можно попробовать загрузить файл из интернета, укажем в
URL_DOWNLOAD = " http://ardownload.adobe.com/pub/adobe/reader/win/10.x/10.0.1/en_US/AdbeRdr1001_en_US.exe";
FILE_NAME = "AdbeRdr1001_en_US.exe";
Так же можно создать функцию для автоматического определения названия файла ...
Запускаем программу, нажимаем на кнопку, если все заработало, программа повиснет. И будет висеть до завершения загрузки. Но есть способ обойти зависание и в этом нам поможет компонент IdAntiFreeze (вкладка Indy Misc), добавляем компонент на форму и тестируем нашу программу. Если все заработало, отобразим процесс загрузки. Добавим компонент ProgressBar (вкладка Win32). Теперь создадим два обработчика событий для компонента IdHTTP, первый - OnWorkBegin
void __fastcall TForm1::IdHTTP1WorkBegin(TObject *ASender, TWorkMode AWorkMode,__int64 AWorkCountMax){ ProgressBar1->Max = AWorkCountMax; }во второй обработчик - OnWork
void __fastcall TForm1::IdHTTP1Work(TObject *ASender, TWorkMode AWorkMode,__int64 AWorkCount){ ProgressBar1->Position = AWorkCount; }Как видим, все просто!
Этот комментарий был удален автором.
ОтветитьУдалитьПереименуйте статью в "Как подвесить вомпьютер".
ОтветитьУдалитьтам виснуть вроде не из за чего
ОтветитьУдалитьПовисать оно будет на время закачки. Чтобы этого не происходило, нужно закачку файла (особенно если тяжелый) выбрасывать в отдельный поток (курите TThread или WinAPI).
ОтветитьУдалитьА так спасибо автору за небольшую и полезную заметку.
[C++ Error] Unit1.cpp(22): E2451 Undefined symbol 'UnicodeString' такую бадягу выводит и что хочеш то и делай. в нете рался ничего не нашел полезного
ОтветитьУдалитьна String замени
ОтветитьУдалитьRaiced exseption class EFCreated error - вылазит ошибка при выполнении
ОтветитьУдалитьIdHTTP1->Get(URL_DOWNLOAD, FILE_STREAM);
А имя файла как узнать? автоматически
ОтветитьУдалить