использую curl, чтобы скачать картинку
он вызывает внешнюю функцию для записи в файл
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write);
в оригинале она записывает данные в файл через fwrite()
решил переписать на Qt:
static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
QFile file("test.png");
file.open(stderr, QIODevice::WriteOnly);
file.write(buffer, size * sizeof(float));
file.close();
return;
}
1. file.write не хочет принимать void *buffer. что это вообще такое?
2. просто уточнить - curl вызывает эту функцию один раз? или по мере скачивания файла, дописывая полученные данные?
3. что вернуть в ретурн, чтобы был size_t
ps заодно, прошу прояснить для меня что вообще такое size_t
частно вижу его, но в стандартных типах его нет. зачем его используют и почему пишут именно t?
а так
static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
QFile file("test.png");
file.open(stderr, QIODevice::WriteOnly);
size_t t=file.write((char*)buffer, size);
file.close();
if(t<0) return 0;
return t
}
лучше как-то так:
static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
std::ofstream stream("test.png");
if (!stream)
return 0;
size_t n = size * sizeof(float);
stream.write((unsigned char*) buffer, n);
stream.close();
if (stream.bad())
return 0;
return n;
}
А вот тут автору надо уточнить
size_t n = size * sizeof(float);
может, size - это уже размер в байтах (как у белых людей принято) ?
спасибо, но повторю ещё раз:
- я хочу переписать на Qt
- что такое void *buffer -- почему его можно записывать в файл и почему оно void?
- что за тип size_t ? зачем он нужен?
ещё раз достигнутое:
static size_t write(void *buffer, size_t size, size_t nmemb, void *stream)
{
QFile file("test.png");
file.open(stderr, QIODevice::WriteOnly);
size_t result = file.write((const char *) buffer, size);
file.close();
return result;
}
size_t это не int, a unsigned int, максимальное значение на 32битной системе = 4 ГБ
size_t - это тип-размер, используется для индексации массивов например, указания размера массивов и т.п.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)