Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [CB2009] Как скачать файл с интернета. Без замораживания главной формы... 
:(
    Опции темы
MuForum
  Дата 24.11.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



Доброго времени суток.
Работаю на "C++ Builder 2009".

# Задача: Имя путь к файлу на хостинге и путь куда сохранить файл, необходимо скачать данный файл на локальный компьютер.
1.1. Форма не должна быть в этот момент неактивна. (То есть, пользователь должен в это время работать с формой)
1.2. Должна быть полоска загрузки файла. (Статистика)
- Использую компонент "TCGauge";


В "C++ Builder 6" был такой замечательный компонент как NMHHTP1, который прекрасно справлялся с этой задачей.
- Однако в "C++ Builder 2009" данный компонент убрали.


Попробовал использовать Indy 9 с TIdAntiFreeze, но хреновато этот анти-фрих работает...

# Возможные решения данной проблемы:
1. Indy & Thread. (Запускать каждый файл для скачивания в отдельном потоке)
2. Ваш вариант.


P.S. -> Жду комментариев.

Это сообщение отредактировал(а) MuForum - 24.11.2009, 13:39


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
Alca
Дата 24.11.2009, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



WinInet + TThread 


--------------------
PM WWW ICQ Skype Jabber   Вверх
Platov
Дата 25.11.2009, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

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



 
Цитата
WinInet + TThread  
 полностью согласен.

что-то вроде такого:
Код

//---------------------------------------------------------------------------

bool Download(AnsiString url,AnsiString dest)
{
char buf[256];
AnsiString str=dest,agent=Edit1->Text;

int np;
bool err;
err=false;

HINTERNET session,file;          //PRE_CONFIG_INTERNET_ACCESS INTERNET_OPEN_TYPE_PRECONFIG
session = InternetOpen(agent.c_str(), PRE_CONFIG_INTERNET_ACCESS, 0, 0, 0);

file    = InternetOpenUrl(session,url.c_str(), 0, 0, 0, 0);

DWORD    Code = 0,
Size = sizeof( Code );
if (file==NULL) err=true;
 else
if (HttpQueryInfo( file, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, ( LPVOID ) &Code, ( LPDWORD  ) &Size, NULL  ) )
 if (Code!=200) err=true;
else
{


unsigned long len=0,offs=0;
AnsiString buff="";

if (file!=NULL)
{
DWORD Written;
HANDLE hDestFile = CreateFile(str.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

if (hDestFile == INVALID_HANDLE_VALUE) err=true;
else

do {
   InternetReadFile(file, buf, sizeof(buf), &len);
   if (len>=0)
   {
      offs += len;
      buff=buf;
      WriteFile(hDestFile, buf, len, &Written, NULL);
      Application->ProcessMessages();
   }

   else
   {
      int error = GetLastError();
      err=true;
      InternetCloseHandle(file);
      InternetCloseHandle(session);
      Application->ProcessMessages();
      ::Sleep(1000);
      Application->ProcessMessages();
      session = InternetOpen("Our Agent", PRE_CONFIG_INTERNET_ACCESS, 0, 0, 0);
      file = InternetOpenUrl(session, url.c_str(), 0, 0, 0, 0);
      InternetSetFilePointer(file, offs, 0, FILE_BEGIN, 0);
   }

} while (len);

CloseHandle(hDestFile);

}

InternetCloseHandle(file);
InternetCloseHandle(session);


if (!err) return true;
 else return=false;
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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