1.下载最新版的libcurl,纯净版的,不要下载简化版的,简化版的,可能没有winbuild文件所以可能就会没有Makefile.vc.我的是curl-7.44.0.zip,解压,进入目录winbuild,仔细阅读BUILD.WINDOWS.txt这篇文档
打开VS2013 开发人员命令提示并进入到winbuild文件执行 nmake /f Makefile.vc mode=static<mode=static or dll> VC=12<对应的VS版本>
完成编译后libcurl静态库会出现在builds目录下包括头文件和libcurl_a.lib,我们需要的是builds/libcurl-vc12-x86-release-static-ipv6-sspi-winssl下面的include和lib两个文件夹.
struct FtpFile //定义一个结构为了传递给my_fwrite函数.可用curl_easy_setopt的CURLOPT_WRITEDATA选项传递
{
char *filename;
FILE *stream;
};
int my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
{
struct FtpFile *out = (struct FtpFile *)stream; // stream指针其实就是指向struct FtpFile ftpfile的
if (out && !out->stream)
{
out->stream = fopen(out->filename, "wb"); //没有这个流的话就创建一个名字是out->filename.
if (!out->stream)
return -1;
}
return fwrite(buffer, size, nmemb, out->stream);
}
下载代码
CURL *curl;
CURLcode res;
char Pathdown[200] = {0};
CString Dolwnpath = _T("");
Dolwnpath = "D:/";
Dolwnpath += FileName;
strcpy(Pathdown, Dolwnpath);
struct FtpFile ftpfile = {Pathdown, NULL }; //初始化一个FtpFile结构
curl_global_init(CURL_GLOBAL_DEFAULT);
//XID8690_LoadLib();
curl = curl_easy_init();
CString addrInfo = _T("");
logstrdlg.Empty();
logstrdlg = "下载源文件:";
logstrdlg += FileName;
//logstrdlg += "\r\n";
ftp.IWriteLog(logstrdlg);
logstrdlg.Empty();
logstrdlg = "目标文件:";
logstrdlg += Dolwnpath;
ftp.IWriteLog(logstrdlg);
if (curl)
{
addrInfo = "ftp://192.168.1.6/";
addrInfo += FileName;
curl_easy_setopt(curl, CURLOPT_URL, addrInfo);
curl_easy_setopt(curl, CURLOPT_USERPWD, ":1234");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); //给相关函数的第四个参数传递一个结构体的指针
curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE);//CURLOPT_VERBOSE 这个选项很常用用来在屏幕上显示对服务器相关操作返回的信息
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (CURLE_OK != res)
{
//fprintf(stderr, "curl told us %d\n", res);
logstrdlg.Format("curl told us %d\n", res);
ftp.IWriteLog(logstrdlg);
return FALSE;
}
logstrdlg.Empty();
logstrdlg.Format("curl told us %d\n", res);
logstrdlg.Remove('\r');
logstrdlg.Remove('\n');
ftp.IWriteLog(logstrdlg);
}
if (ftpfile.stream)
fclose(ftpfile.stream);
curl_global_cleanup();
return TRUE;
删除代码:
CURL *curlhandle = NULL;
CURL *curl = NULL;
CURLcode res = CURLE_GOT_NOTHING;
curl_global_init(CURL_GLOBAL_DEFAULT);
curlhandle = curl_easy_init();
curl = curl_easy_init();
if (curl) {
CString cstrTemp = CString("DELE /") + CString(remotepath);
CString cstrTemp1 = CString(IP);
curl_easy_setopt(curl, CURLOPT_URL, cstrTemp1.GetBuffer());
curl_easy_setopt(curl, CURLOPT_USERPWD, "x1:1234");
cstrTemp1.ReleaseBuffer();
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, cstrTemp.GetBuffer());
curl_easy_setopt(curl, CURLOPT_QUOTE, headers);
cstrTemp.ReleaseBuffer();
res = curl_easy_perform(curl);
curl_slist_free_all(headers);
curl_easy_cleanup(curlhandle);
curl_easy_cleanup(curl);
/*if (CURLE_OK != res) {
char cTemp[128] = { 0 };
sprintf(cTemp, "%s\n", curl_easy_strerror(res));
OutputDebugString(cTemp);
MessageBox(cTemp, "提示");
return 0;
}*/
}
curl_global_cleanup();
return TRUE;
删除时出现报23错误,还未找到原因,希望有人找出,虽然报错,但是可以删除