日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 下使用curl 获取ftp文件

發(fā)布時間:2025/4/14 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 下使用curl 获取ftp文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從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、解壓后得到一個文件夾“l(fā)ibcurl-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文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。