从http://curl.haxx.se/下载的win32版本的curl都不能使,#include <curl.h>后总是报错:external symbol ,意思就是没有链接到curl的各种library,最后尝试了n多次终于成功了,希望大家以后少走弯路!

以Windows 8 64bit,Visual Studio 2012 为例:

1、获取curl:

这里可以获得所有版本的curl,我下载的是Win32 - MSVC版本的curl,我下载的是MSVC 7.19.3 devl SSL 版本,可以从这里下载。

2、解压后得到一个文件夹“libcurl-7.19.3-win32-ssl-msvc”,可以看到里面有include文件夹和lib文件夹

3、添加引用:用Visual Studio打开你的C++工程,选择Project ->project name Properties -> Configuration Properties -> VC++ Dicrectories 在右侧的Include Directories添加“libcurl-7.19.3-win32-ssl-msvc\include”的绝对路径,如:“X:\a\b\c\libcurl-7.19.3-win32-ssl-msvc\include”,其中“X:\a\b\c\”根据你curl解压到的地方不同,要有所变动。

同理,将“libcurl-7.19.3-win32-ssl-msvc\lib\debug”的绝对路径添加到Libraries Directories中,注意libcurl-7.19.3-win32-ssl-msvc\lib文件夹中包含debug和release两个文件夹,这里之所以添加debug文件夹是因为笔者当前vs的编译模式是debug的,如果你当前的编译模式是release的,那么请将libcurl-7.19.3-win32-ssl-msvc\lib\release文件夹添加到这里,而不要添加debug。

注:在哪种编译模式下就添加哪个文件夹!要把绝对路径写上,而不是相对路径!如果你不知道什么是绝对路径,请看这里。

4、添加lib:选择左侧的Configuration Properties -> Linker -> Input 将Additional Dependencies中加入:

curllib.lib和curllib_static.lib这两个,然后保存

5、拷贝dll:将libcurl-7.19.3-win32-ssl-msvc文件夹下所有的.dll文件拷到VS工程目录下的Debug文件夹中。注意,这里之所以拷到VS工程Debug文件夹中,是因为VS编译后的.exe运行时侯会寻找.dll,如果不放过来就该提示有错误了。另外,VS 2012 编译后可能会生成2个或2个以上的Debug文件夹,但只有一个Debug里有编译后生成的.exe文件,要放到这个Debug里,不要放错。PS,据说将.dll放到C盘System32文件夹里可以一劳永逸,不用每次新建工程都要拷贝.dll到Debug下,不过有待考证,我没试过。

6、关于libsasl.dll:此时运行可能会提示你缺少libsasl.dll,这个dll下载的curl里是没有的,可以从网上下一个,然后和其他的.dll一样放到Debug目录下,最后编译就可以运行了

7、获取ftp文件的示例:这里是一份获取FTP服务器文件的示例代码,可以测试curl是否配置成功(前提是你要有个FTP服务器,如果你没有,但是想搭建一个简单的FTP服务器,请看这里

要修改"ftp://192.168.1.101/sc.jpg"和"username:userpassword"两个参数,这分别对应着FTP服务器上文件的地址,和FTP服务器的用户名和密码,注意用户名和密码中间有个冒号分隔。

8、Good luck!

#include <string>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <curl\curl.h>
#include <stdio.h>
using namespace std;struct FtpFile
{const char *filename;FILE *stream;
};static size_t FetchFiles(void *buffer, size_t size, size_t nmemb, void *stream)
{struct FtpFile *out = (struct FtpFile *)stream;if (out && !out->stream) {// open file for writing out->stream = fopen(out->filename, "wb");if (!out->stream)return -1; // failure, can't open file to write}return fwrite(buffer, size, nmemb, out->stream);
}int DownloadFtpFile()
{CURL *curl;CURLcode res;struct FtpFile ftpfile = {"a.jpg", // name to store the file as if succesful//NULL};curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if (curl) {curl_easy_setopt(curl, CURLOPT_URL,"ftp://192.168.1.101/sc.jpg");curl_easy_setopt(curl, CURLOPT_USERPWD, "username:userpassword");// Define our callback to get called when there's data to be written //curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, FetchFiles);// Set a pointer to our struct to pass to the callback //curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile);// Switch on full protocol/debug output //curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);res = curl_easy_perform(curl);// always cleanup curl_easy_cleanup(curl);if (CURLE_OK != res) {//we failed fprintf(stderr, "curl told us %d\n", res);}}if (ftpfile.stream)fclose(ftpfile.stream); // close the local file curl_global_cleanup();getchar();return 0;
}int main(void)
{DownloadFtpFile();return 0;
}

转载于:https://www.cnblogs.com/exlsunshine/p/3775074.html

C++ 下使用curl 获取ftp文件相关推荐

  1. ubuntu下linux:curl使用ftp获取服务器上指定目录的所有文件集合以及下载

    curl使用ftp获取服务器上指定目录的所有文件集合以及下载 直接编译可用,注意修改测试main函数内的字符串,注释我觉得写的挺详细了,跑不起来的评论区可问 头文件 #ifndef FTP_DOWNL ...

  2. php如何获取ftp文件信息,FTP 得到文件树[php]

    $host="192.168.1.214"; $post=21; $username="zwc3g"; $password="zwc3ggg" ...

  3. Linux基础命令---get获取ftp文件

    get 使用lftp登录ftp服务器之后,可以使用get指令从服务器获取文件.   1.语法 get [-E]  [-a]  [-c] [-O base]  rfile  [-o lfile]   2 ...

  4. php curl 采集文件,curl获取远程文件内容

    /** 获取远程文件内容 @param $url 文件http地址 */ function fopen_url($url) { if (function_exists('file_get_conten ...

  5. Linux基础命令---mget获取ftp文件

    mget 使用lftp登录mftp服务器之后,可以使用mget指令从服务器获取文件.mget指令可以使用通配符,而get指令则不可以. 1.语法       mget [-E]  [-a]  [-c] ...

  6. java 获取ftp 文件路径_java在浏览器上获取FTP读文件路径

    展开全部 问一下,你是62616964757a686964616fe4b893e5b19e31333337623437想做ftp上传下载么? 首先你需要安装一个ftp服务端程序,启动起来,然后下载一个 ...

  7. python ftp 文件修改时间 乐贴_如何使用Python ftplib获取FTP文件的修改时间

    我正在尝试使用Python将CSV文件加载到Amazon S3.我需要知道CSV文件的修改时间.我正在使用ftplib将FTP连接到Python(2.7). 解决方法: MLST或MDTM 虽然您可以 ...

  8. python ftp 文件修改时间_如何利用pythonftplib获取FTP文件的修改时间

    MLST或MDTM 虽然可以使用MLST或MDTM命令通过FTP检索单个文件的时间戳,但ftplib不支持这两种命令. 当然,您可以使用^{}自己实现MLST或MDTM. 见: MDTM的一个简单示例 ...

  9. ftp 修改服务器文件时间戳,如何使用Python ftplib获取FTP文件的修改时间

    小编典典 MLST或MDTM 虽然可以使用MLST或MDTM命令通过FTP检索单个文件的时间戳,但ftplib都不支持. 当然,您可以使用实现自己的MLST或.MDTMFTP.voidcmd 有关详细 ...

最新文章

  1. C#中文件和byte[]互换问题
  2. 中小型企业如何选择服务器配置?
  3. 【Tyvj - 1305】最大子序和(单调队列优化dp)
  4. 军事医学研究院应晓敏组招聘博士后
  5. Mac 空间不足,4 招帮你释放空间
  6. python invalid character_python提示invalid character in identifier
  7. java web问卷调查设计方案_Java web 调查问卷
  8. MQTT SSL加密单双向认证
  9. html里 alt属性什么意思,HTML
  10. crond和crontab详解
  11. NLP 之 jieba (结巴)制作词云
  12. PTA 7-161 双曲余弦函数(*)
  13. IPHONE视频软件测试,工具|6款视频剪辑APP测评
  14. 微分的定义和介绍习题
  15. Lightoj 1258
  16. 输入数字N,然后输入N个数,计算这N个数的和。
  17. ca32a_demo_c++创建动态数组
  18. ip2977_desc.TXT
  19. 熊海CMS 1.0代码审计漏洞集合
  20. 尚硅谷在线教育十三:讲师、课程功能完善

热门文章

  1. div超出不换行_一日一技:XPath不包含应该怎么写?
  2. 深度学习笔记4:Self-Taught Learning and Unsupervised Feature Learning
  3. linux管理员工作目录,密码管理员 - FPM2
  4. sql 修改时间戳语句_从 0 到 1 搭建技术中台之 SQL 审核平台
  5. salesforce学习框架图
  6. Move from SQL to SOQL
  7. Shiro.ini文件概述
  8. 使用Spring Initializer快速创建Spring Boot项目
  9. 转载:分享一下免费的ppt网站(好看,免费)
  10. Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。