Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Нужно уменишить вес, не допуская char buffer[?]


Автор: tolst 26.2.2007, 00:49
Код

#include <stdio.h>
#include <wininet.h>

char buffer[4096] = "";

// Тут кое какой код

BOOL bRead = ::InternetReadFile(hRequest, buffer, sizeof(buffer)-1, &dwBytesRead); // Вот тут как раз таки и используется она

// Тут опять кое какой кот =)


Можно ли как то по другому указать переменную buffer для данного примера? так как даже элементарно становится не корректным скачивать с сайта всего 4 кб, а вдруг страничка весит 1 метр... это че, нужно заранее определять char buffer[1024000] = ""; ? и увеличивать размер программы на 1 мб? помоему глупо...
Подскажите пожалуйста решение этой проблемы.
Заранее благодарен.

Автор: Kuvaldis 26.2.2007, 00:54
tolst, 
Код

char buffer[4096] = "";

Цитата

Подскажите пожалуйста решение этой проблемы.

ТАк объяви указатель char* buffer и выделяй под него из оперативки столько памяти, сколько тебе надо
Код

buffer = new char [размер твоей странички];
... некоторые шаманские действия
delete [] buffer;  // вернуть выделенную память

Автор: tolst 26.2.2007, 00:57
Так в том то и дело, что размер этой самой странички не известен до тех пор пока не скачаешь её...

Автор: chaos 26.2.2007, 07:39
Код

char *lpszBuffer = (char *)malloc(4096);

//..................

free(lpszBuffer)


чем такой вариант не устраивает?

Добавлено @ 07:45 
Цитата(tolst @ 26.2.2007,  02:57)
Так в том то и дело, что размер этой самой странички не известен до тех пор пока не скачаешь её...

дык тебе и не надо ни чего знать!!!!
выкачиваешь порциями размером в буфер и все!
Код


#define BUF_SIZE  4096

char *lpszBuffer = (char *)malloc(BUF_SIZE);

BOOL fSuccess;
DWORD dwBytesRead;
do
{
    fSuccess = ::InternetReadFile(hRequest, lpszBuffer, 4096, &dwBytesRead); 
    if (FALSE == fSuccess) break;

    //тут кудато скалдываешь данные из буефер например в файл
}
while (0 == dwBytesRead);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)