std::string DownloadFile(std::string Fname, std::string Furl)
{
CURL *curl;
CURLcode res;
const char *url = Furl.c_str();
curl = curl_easy_init();
if (curl) {
FILE * pFile;
pFile = fopen(Fname.c_str(),"wb");
if (pFile!=NULL) {
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, pFile);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE);
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_func);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
char errbuf[CURL_ERROR_SIZE];
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
res = curl_easy_perform(curl);
std::string xres = curl_easy_strerror(res);
curl_easy_cleanup(curl);
fclose(pFile);
return xres;
}
}
}
我收到了这个错误:
“System.AccessViolationException”类型的未处理异常 发生在Fourth.exe附加信息:尝试阅读或 写保护的内存。这通常表明其他记忆 是腐败的。
就行:
res = curl_easy_perform(curl);
我出错的任何想法?
答案 0 :(得分:0)
这很可能与您的一个卷曲选项有关,我会查看您添加的明显选项,例如CURLOPT_WRITEFUNCTION
,CURLOPT_WRITEDATA
或CURLOPT_ERRORBUFFER
。我最初的评论是错误的:/
答案 1 :(得分:0)
我有类似的问题,我通过将回调设置为CURLOPT_WRITEFUNCTION
来解决了这个问题,这是为您提供的示例:
namespace
{
std::size_t callback(
const char* in,
std::size_t size,
std::size_t num,
char* out)
{
std::string data(in, (std::size_t) size * num);
*((std::stringstream*) out) << data;
return size * num;
}
}
然后像下面这样在您的CURLOPT_WRITEFUNCTION
中使用它:curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);