Главная arrow С++ (часть 2) arrow Заголовочный файл загрузчика

Заголовочный файл загрузчика

Приведенный в листинге 5.2 заголовочный файл следует включать в любой файл, использующий загрузчик файлов из Интернета. Назовите его dl.h.
 
vising namespace std;
const int MAX_ERRMSG_SIZE = 80;
// Класс исключений для ошибок загрузки, class DLExc {
Char err [MAX_ERRMSG_SIZE] ; public: DLExc(char *exc)
if(strlen(exc) < MAX_ERRMSG_SIZE) strcpy(err, exc);
}
const char * geterrO  { return err;
}
};
class Download {
static bool httpverOK(HINTERNET hlurl); static bool getfname(char *url, char *fname); static unsigned long openfile(char *url, bool reload, ofstream &fout);
Public:
static bool download(char *url, bool rescart=false, void (*update)(unsigned long, unsigned long)=NULL);
};
Демонстрация загрузчика файлов из Интернета
В листинге 5.3 приведена программа для демонстрации функционирования загрузчика файлов из Интернета, представляющая собой простое консольное приложение, которое загружает файл. Назовите файл программы dltest.cpp.
| Листинг 5.3. Пример программы, использующей загрузчик файлов из Интернета "1
!----------------------------------------------------------------------------------------------------j
#include <iostream> #include "dl.h"
// Эта функция отображает процесс загрузки в виде процентов, void showprogress(unsigned long total, unsigned long part)  {
int val = (int)  ((double) part/total*100);
cout « val « "%" « endl;
}
int main(int argc, char *argv[]) {
// Этот URL-адрес применяется только для демонстрации. Замените // его адресом файла, который вы хотите загрузить, char url[] =
"http://www.osborne.com/products/0072226803/0072226803_code.zip''; bool reload = false;
if(argc==2 && !strcmp(argv[l],  "reload")) reload = true;
cout « "Beginning download.\n";
try {
if(Download::download(url, reload, showprogress)) cout « "Download Complete\n"; } catch(DLExc exc)
cout « exc.geterr() « endl; cout « "Download Interrupted\n";
}
return 0;
}