【发布时间】:2018-07-02 14:42:22
【问题描述】:
我的以下代码有问题,没有错误但没有下载文件。
int main(void)
{
CURL *curl = NULL;
CURLcode res = CURLE_OK;
FILE *fp;
curl = curl_easy_init();
if (curl)
{
std::string url = "https://curl.haxx.se/mail/lib-2014-03/0158.html";
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
char outfilename[FILENAME_MAX] = "C:\Installer-Release-64-bit.html";
fp = fopen(outfilename, "wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
和写数据函数如下
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
size_t written = fwrite(ptr, size, nmemb, stream);
return written;
}
【问题讨论】:
-
"C:\Installer-Release-64-bit.html" - 尝试转义该反引号。毕竟是 Windows。只是为了好玩,请尝试遵守Spencer's 6th Commandment,而不是盲目地假设
fopen有效。假设是一切的母亲...... -
在尝试打开输出文件后测试 fp - 检查函数返回值以生成可靠的代码,这样您就知道哪里出了问题。
-
不检查标准(或API)函数的返回值是一个非常不好的习惯
-
是的,让我检查所有函数的返回值。
标签: c++ visual-c++ window libcurl