Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> загрузка файла по URL 
:(
    Опции темы
Atos
  Дата 2.3.2007, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 2.9.2004
Где: Омск

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



столкнулся с задачей: написать код, автоматически скачивающий файл по данному URL (возможно, используя Internet Explorer). Я ещё не занимался веб-кодингом, подскажите, пожалуйста, какие существуют для этой задачи стандартные решения?/C++ библиотеки?. ( Если бы дали ссылку на пример исходного кода, было бы совсем замечательно.)
PM MAIL   Вверх
chaos
Дата 2.3.2007, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



погляди в книгу БСП том 31, там для начала можно чего-нибудь подчерпнуть.
а для твоей задачи должен сгодитьсЯ CHttpFile из MFC, у него даже метод есть GetFileURL
PM WWW   Вверх
Atos
Дата 2.3.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 2.9.2004
Где: Омск

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



А БСП это что?
PM MAIL   Вверх
Atos
Дата 3.3.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 2.9.2004
Где: Омск

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



Нашёл способ (вроде работает). Вот выкладываю, если кому понадобится

Код

//чтобы скомпилировалось в VC++, надо
//в "Project|Properties|Linker|Input|Additional Dependencies"
// добавить"Wininet.lib"

#include <wininet.h>
#include <fstream>


const ERROR_TMPFILE_UNOPENED = 10;
const ERROR_UNABLE_INITILIZE_WININET = 11;
const ERROR_CANNOT_OPEN_URL = 12;
const ERROR_UNLOAD_FILE_FROM_URL = 13;


int DownloadFromURL(CString a_URL, CString a_tmpfile)
{
 const BUFSIZE = 8*1024;

 ofstream ofs(a_tmpfile, ios_base::binary);
 if (!ofs) return ERROR_TMPFILE_UNOPENED;

 HINTERNET hNet = ::InternetOpen("Download Image",
                                PRE_CONFIG_INTERNET_ACCESS,
                                NULL,
                                INTERNET_INVALID_PORT_NUMBER,
                                0) ;
 if (!hNet)  return ERROR_UNABLE_INITILIZE_WININET;

 HINTERNET hUrlFile = ::InternetOpenUrl(hNet,
                                a_URL,
                                NULL,
                                0,
                                INTERNET_FLAG_RELOAD,
                                0) ;
 if (!hUrlFile) 
    {
     return ERROR_CANNOT_OPEN_URL;
     ::InternetCloseHandle(hNet);
    }

 char buffer[BUFSIZE];
 DWORD dwBytesRead=0;
 
 do
   {
    if (!InternetReadFile(hUrlFile, buffer, sizeof(buffer), &dwBytesRead))
         return ERROR_UNLOAD_FILE_FROM_URL;
    if (dwBytesRead) {ofs.write(buffer,dwBytesRead);}
        else break;
   } 
   while (true);

 ofs.close();

 ::InternetCloseHandle(hUrlFile);
 ::InternetCloseHandle(hNet);
 return 0;
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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