赞
踩
使用git将vcpkg从github上clone下来:github地址
git clone https://github.com/microsoft/vcpkg
使用cmd进入vcpkg所在目录执行批处理文件完成安装。
F:\vcpkg>cd vcpkg
F:\vcpkg\vcpkg>bootstrap-vcpkg.bat
进入vckpkg目录,使用vckpkg install 命令进行安装。在安装前可使用vcpkg search命令进行库的检索。
以下是所有的curl库,如果要支持sftp则需要安装支持ssh的curl。
F:\vcpkg\vcpkg>vcpkg search curl cpr 1.3.0-8 C++ Requests is a simple wrapper around libcurl inspired by the excellent Pyth... curl 7.71.1#2 A library for transferring data with URLs curl[brotli] brotli support (brotli) curl[c-ares] c-ares support curl[http2] HTTP2 support curl[mbedtls] SSL support (mbedTLS) curl[non-http] Enables protocols beyond HTTP/HTTPS/HTTP2 curl[openssl] SSL support (OpenSSL) curl[sectransp] SSL support (sectransp) curl[ssh] SSH support via libssh2 curl[ssl] Default SSL backend curl[sspi] SSPI support curl[tool] Builds curl executable curl[winssl] SSL support (Secure Channel / "WinSSL") curlpp 2018-06-15-3 C++ wrapper around libcURL czmq[curl] Build with libcurl fmi4cpp[curl] Allows loading FMUs from URL oatpp-curl 1.0.0 Oat++ Modern web framework curl module to use libcurl as a RequestExecutor on ... restclient-cpp 0.5.2 Simple REST client for C++. It wraps libcurl for HTTP requests.
使用安装命令进行编译所需要的库,可以指定所要编译库的信息如:动态链接/静态链接,x86/x64等信息。以下命令编译的为x86适用于windows的静态链接库。
F:\vcpkg\vcpkg>vcpkg install curl[ssh]:x86-windows-static
不指定静态还是动态编译的话会自动将静/动态都编译出来。
接下来就可以等待编译成功了。vcpkg需要下载所要编译包的各种依赖文件,而其下载会特别慢推荐这篇文章解决下载慢的解决文章。
推荐这篇文章4.0之后部分vs中使用vcpkg
头文件中引入#inclde<curl/curl>
其中MYRESULT为一个枚举类型
using MYRESULT = enum
{
SECCESS = 0,
OPEN_FILE_ERROR,
UPLOAD_FILE_ERROR
};
int32_t FileUpLoad(const std::string& user, const std::string& passwd, const std::string& sftpPath, const std::string& filePath, int32_t& curlErrorCode) { int32_t myres = 0; CURL* curl = nullptr; CURLcode res; std::string userPwd = user + ":" + passwd; std::cout << userPwd << std::endl; //打开所需上传的文件 FILE* pSendFile = nullptr; struct stat file_info; curl_off_t iFileSize; if (stat(filePath.c_str(), &file_info)) { return MYRESULT::OPEN_FILE_ERROR; } iFileSize = (curl_off_t)file_info.st_size; //获取文件大小 fopen_s(&pSendFile, filePath.c_str(), "rb"); //打开文件 if (nullptr == pSendFile) { return MYRESULT::OPEN_FILE_ERROR; } curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, sftpPath.c_str()); //设置sftp的路径 curl_easy_setopt(curl, CURLOPT_USERPWD, userPwd.c_str()); //设置用户名和密码 curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);//设置回调函数 curl_easy_setopt(curl, CURLOPT_READDATA, pSendFile); //设置要上传文件的指针 curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1); //选择是否在远程文件夹不存在时创建,1为创建 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); //上传 curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, iFileSize);//设置文件大小 curl_easy_setopt(curl, CURLOPT_FTP_RESPONSE_TIMEOUT, 120); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); //获取curl的执行结果 res = curl_easy_perform(curl); curl_easy_cleanup(curl); if (CURLE_OK != res) { curlErrorCode = res; myres = MYRESULT::UPLOAD_FILE_ERROR; } } else { myres = MYRESULT::UPLOAD_FILE_ERROR; } //关闭文件及curl清理 fclose(pSendFile); curl_global_cleanup(); return myres; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。