我正在尝试从我的网络服务器下载图片并将其保存在文件夹中。
<CURL *curl;
FILE *fp;
CURLcode res;
char outfilename[FILENAME_MAX];
std::string soutfilename = "C:\\Users\\MDrazyk\\counTechTemp\\";
string lawl= getURL(einstellung[8][0]);
const char *url = lawl.c_str();
curl = curl_easy_init();
for(int g = 0; g < std::stoi(einstellung[0][7]); ++g){
string str = einstellung[8][0];
soutfilename =soutfilename +str;
strcpy(outfilename,soutfilename.c_str());
if (curl) {
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);
}
}
curl_easy_cleanup(curl);
fclose(fp);
和getURL:
std::string getURL(std::string a) {
std::string url = "http://192.168.240.1/files/";
url = url + a;
retur url;
}
einstellung [8] [0] =图片名称
当我启动程序时,它将图片保存在它们为空的文件夹中。 当我手动添加Url时,第一张图片已完成,有时下一张图片已损坏。
答案 0 :(得分:0)
std::string soutfilename = "C:\\Users\\MDrazyk\\counTechTemp\\";
for(int g = 0; g < std::stoi(einstellung[0][7]); ++g){
soutfilename = soutfilename + str;
}
您一遍又一遍地追加soutfilename
。你最终得到的路径如“C:\ Users \ MDrazyk \ counTechTemp \ fileone.jpgfiletwo.jpgfilethree.jpg”
for(int g = 0; g < std::stoi(einstellung[0][7]); ++g){
if (curl) {
fp = fopen(outfilename,"wb");
}
}
fclose(fp);
你在for循环中打开文件,但只在最后关闭它。你最终会得到一堆未正确关闭的文件。在您致电fclose
的同一范围内致电fopen
。
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
如果您打算写信FILE*
,则无需设置CURLOPT_WRITEFUNCTION。 CURLOPT_WRITEFUNCTION的默认值为fwrite,因此只需将CURLOPT_WRITEDATA设置为FILE*
即可。
如果这不能解决您的问题,您需要向我们展示write_data
方法的内容。