已解决......
在更多转换之后,通过使用“rename”作为引用命令,它需要包含原始名称和完整路径(包括重命名到目标)的完整路径。我没有尝试过其他挫败尝试的路径。
大家好,我尝试了所有不同的组合,不断失败,不知道我错过了什么。我正在尝试使用Libcurl在SFTP站点上进行简单的文件重命名。我一直都在寻找答案,但不断提出来。
BTW ...对于此测试,文件夹中只有一个文件名,因此没有关于现有文件覆盖的问题...而且我是最初为任何可能的“权限”问题上传文件的登录用户
我的第一个测试是获得所期望的简单语法正确,但结果不然。我首先开始使用NON-SFTP站点......只需常规FTP。
// ex: fpt://mysite.com/subpathNeeded/
curl_easy_setopt(MyCurl, CURLOPT_URL, RemotePath );
// need a "QUOTE" command before rename will occur in postQuote
strcpy_s( NewCmd, _countof(NewCmd), "PWD \0" );
quotelist = curl_slist_append(quotelist, NewCmd );
// NOW, we can issue the rename from and rename to commands
strcpy_s( RenameFrom, _countof(RenameFrom), "RNFR " );
strcat_s( RenameFrom, _countof(RenameFrom), RemoteCurrentFileName );
postquotelist = curl_slist_append( postquotelist, RenameFrom );
strcpy_s( RenameTo, _countof(RenameTo), "RNTO " );
strcat_s( RenameTo, _countof(RenameTo), RemoteRenameToName );
postquotelist = curl_slist_append( postquotelist, RenameTo );
curl_easy_setopt(MyCurl, CURLOPT_QUOTE, quotelist );
curl_easy_setopt(MyCurl, CURLOPT_POSTQUOTE, postquotelist );
// NOW, perform the print working directory, then rename...
MyCurlResult = curl_easy_perform(MyCurl);
这没问题。所以现在,我切换到SFTP并且它失败了...通过研究,SFTP不喜欢“PWD”,但确实允许“pwd”(案例问题),没问题。然后,它不喜欢RNFR和RNTO,但接受“mv”(移动)。所以,如果我处于SFTP模式,我会改为
// lower case "pwd" print working directory
strcpy_s( NewCmd, _countof(NewCmd), "pwd\0" );
quotelist = curl_slist_append(quotelist, NewCmd );
// "mv" = move "originalfile" "newfile"
strcpy_s( RenameFrom, _countof(RenameFrom), "mv \"\0" );
strcat_s( RenameFrom, _countof(RenameFrom), RemoteCurrentFileName );
strcat_s( RenameFrom, _countof(RenameFrom), "\" \"\0" );
strcat_s( RenameFrom, _countof(RenameFrom), RemoteRenameToName );
strcat_s( RenameFrom, _countof(RenameFrom), "\"\0" );
postquotelist = curl_slist_append( postquotelist, RenameFrom );
当我执行此操作时,我得到一个CURL ERROR ...
但是,如果我不尝试“mv”命令并且只发送“pwd”的QUOTE命令,它会很好地执行并且它会正确列出预期的文件夹/子目录我正在尝试重命名该文件所以我知道它在正确的目录中。我在“RemoteCurrentFileName”和“RemoteRenameToName”中的值只是文件的主干,分别没有完整的路径。我也试过包括完整路径,两个版本都失败了。例如:
RemoteCurrentFileName = "FileIWantToRename.txt"
or
RemoteCurrentFileName = "/subpathNeeded/FileIWantToRename.txt"
此外,我查看了文档,并注意到“重命名”是一个有效的“QUOTE”命令,并尝试过这个...
rename "original file" "new file"
那也失败了
这应该不难做到。我错过了什么简单/愚蠢...这完全令人沮丧。
答案 0 :(得分:1)
已解决......
在更多转换之后,通过使用“rename”作为引用命令,它需要包含原始名称和完整路径(包括重命名到目标)的完整路径。在我的其他挫败尝试中,我没有试过这条道路
strcpy_s( RenameFrom, _countof(RenameFrom), "rename \"\0" );
strcat_s( RenameFrom, _countof(RenameFrom), RemoteCurrentFileNameWithFullPath );
strcat_s( RenameFrom, _countof(RenameFrom), "\" \"\0" );
strcat_s( RenameFrom, _countof(RenameFrom), RemoteRenameToNameWithFullPath );
strcat_s( RenameFrom, _countof(RenameFrom), "\"\0" );
quotelist = curl_slist_append( quotelist, RenameFrom );
MyCurlResult = curl_easy_perform(MyCurl);