Libcurl ftp Windows下使用实现下载删除

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错误,还未找到原因,希望有人找出,虽然报错,但是可以删除

猜你喜欢

转载自blog.csdn.net/xmmdbk/article/details/82721230
今日推荐