前言
网上关于libcurl的ftp和sftp的使用,已经非常全面了。在我开发的工程中,发现对于libcurl中一些命令的使用,网上的资料并不全面。所以这也是我写这篇文章的原因。
1、代码部分
/*
该部分代码,是我整个FTP管理器中摘选的一部分,如果他有问题,欢迎大家反馈。理论上是没有问题的。
*/
/*
执行FTP命令 0 ok 其他curl错误码 --有重命名,删除文件,新建文件夹
CMD:命令具体内容 FTPHead FTP或者是Sftp的区分
*/
int slotFTPCMDExec(string CMD, string FTPHead)
{
char* CMD2 = CMD.c_str();
struct curl_slist *CMDlist = nullptr;//初始化命令列表
string g_FTPCurrentPath =“你要操作的文件所在的目录”
String UsrPass = “你设备实际的用户名” + ":" + 你设备实际的密码;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, g_FTPCurrentPath.c_str());
url_easy_setopt(curl, CURLOPT_USERPWD, UsrPass.c_str());
if (CMDlist != nullptr)
{
curl_slist_free_all(CMDlist);//清空命令列表 - 此函数没有返回值
CMDlist = nullptr;//清空后 一定要手动赋值NULL
}
curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
if (FTPHead == "sftp")//Sftp的命令
{
CMDlist = curl_slist_append(CMDlist, CMD2);//Sftp支持的命令 rm mkdir rename rmdir chmod atime pwd touch
}
else if (FTPHead == "ftp" && CMD.contains("RNTO"))//ftp的重命名
{
CMDlist = curl_slist_append(CMDlist, CMD.mid(0, CMD.indexOf("RNTO")).c_str());//!!!!在FTP的时候,这个一定只能隔一个空格 所有命令都是这样 而且不用加那么长的路径
CMDlist = curl_slist_append(CMDlist, CMD.mid(CMD2.indexOf("RNTO")).c_str());
}
else if ((FTPHead == "ftp") && (CMD.contains("DELE") || (CMD.contains("MKD")) || (CMD.contains("SITE"))))//ftp的其他命令
{
CMDlist = curl_slist_append(CMDlist, CMD2);
}
curl_easy_setopt(curl, CURLOPT_POSTQUOTE, CMDlist);// CURLOPT_POSTQUOTE CURLOPT_QUOTE 我的理解出了执行的优先级不一样 其他没区别
rs = curl_easy_perform(curl);//执行完这个之后 就一定会打印文件列表 !! 即使你把文件列表回调函数指针赋值为null 也不行!!
return rs;
}
2、命令具体内容
1、重命名:把111文件重命名123
FTP:
RNFR 111RNTO 123
SFTP:
rename /文件路径/文件旧名字 /文件路径/文件新名字
2、删除文件
SFTP:
rm /文件路径/文件名字
FTP:
DELE /文件路径/文件名字
不支持删除非空文件夹
3、新建文件夹
FTP
MKD 文件名字
SFTP
mkdir //文件路径/文件名字
4、要注意的是SFTP支持的命令是Libcurl自己定的,FTP支持的命令是FTP协议中规定的。千万不能直接用linux命令,他们只是像,但不是一回事
Libcurl的SFTP所能支持的命令
rm mkdir rename rmdir chmod atime pwd touch
具体的可以参考一下libcurl的官方文档
CURLOPT_QUOTE
https://curl.se/libcurl/c/CURLOPT_QUOTE.html
FTP协议(指令集)_GoRustNeverStop的博客-优快云博客_ftp指令集
https://blog.youkuaiyun.com/weiyuefei/article/details/51758288