Отправляет email-рассылки с помощью сервиса Sendsay

[prg] C++ wininet - в чем может быть ошибка закачки

Здравствуйте, уважаемые!

Код компилируется, но видимо, ошибка в логике. Свежим взглядом посмотрите,
что бросается в глаза? либо я примитивную ошибку в логике не вижу.

#include <windows.h>
#include <string>
#include <iostream>
#include <fstream>
#include <wininet.h>
using namespace std;

int main() {
int error;
HINTERNET hSess=NULL;
HINTERNET hFile=NULL;
string url="http://www.blindcompass.ru/test.mp3";
char chBuf[64000];
unsigned long len, offs;
offs=0;
// открываем сессию
hSess=InternetOpen("LKF_loader_first", PRE_CONFIG_INTERNET_ACCESS, NULL,
NULL, 0);
// получаем дескриптор файла
hFile=InternetOpenUrl(hSess, url.c_str(), NULL, 0, 0, NULL);
do {
InternetReadFile(hFile, chBuf, sizeof(chBuf), &len);
if (len > 0) {
// данные прочитались, записываем их в файл
offs+=len;
}
else {
// анализируем номер ошибки
error=GetLastError();
// пытаемся восстановить скачивание
// для этого закрываем соединение и сессию
InternetCloseHandle(hFile);
InternetCloseHandle(hSess);
// ждем одну секунду
Sleep(1000);
// вновь открываем сессию
hSess=NULL;
hFile=NULL;
hSess=InternetOpen("LKF_loader_second", PRE_CONFIG_INTERNET_ACCESS, NULL,
NULL, 0);
// вновь получаем дескриптор файла
hFile=InternetOpenUrl(hSess, url.c_str(), NULL, 0, 0, NULL);
// перемещаем указатель, где прервалась закачка
InternetSetFilePointer(hFile, offs, 0, FILE_BEGIN, 0);
// продолжаем качать файл
}
}
while (len);
InternetCloseHandle(hFile);
InternetCloseHandle(hSess);
return 0;
}

Грызунов Александр Викторович (программист)
Самарская областная библиотека для слепых

Ответить   Sun, 16 Dec 2012 00:07:06 +0300 (#2631672)

 

Ответы:

Приветствую всех.

Если отсутствие сохранения полученных данных в файл -- это так задумано, то
других фатальных ошибок в коде нет. Код рабочий, данные закачиваются.
Ошибки в логике содержатся в части обработки получения данных , но они не критические.

Успехов. Анатолий.

Ответить   "i_chay" Mon, 17 Dec 2012 14:54:11 +0300 (#2632765)