Libcurl中SFTP和FTP删除,重命名,新建文件夹操作

前言

        网上关于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的博客-CSDN博客_ftp指令集
https://blog.csdn.net/weiyuefei/article/details/51758288

你可能感兴趣的:(c++,网络)