Заголовочный файл загрузчика |
Приведенный в листинге 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; }
|