gpt4 book ai didi

LibCurl SFTP 重命名文件

转载 作者:行者123 更新时间:2023-12-02 11:59:50 25 4
gpt4 key购买 nike

已解决...

经过更多转换后,通过使用“重命名”作为引用命令,它需要包含原始名称的完整路径和包含重命名目标的完整路径。在我其他失败的尝试中,我没有尝试使用该路径。

<小时/>

大家好,我尝试了所有不同的组合,但一直失败,不知道我错过了什么。我正在尝试使用 Libcurl 在 SFTP 站点上进行简单的文件重命名。我到处寻找答案,但始终找不到答案。

顺便说一句...对于此测试,文件夹中只有一个文件名,因此不存在现有文件覆盖的问题...而且我是最初上传该文件以解决任何可能的“权限”问题的登录用户.

我的第一个测试是为了获得预期的简单语法正确性,但结果却不然。我首先从一个非 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"

那也失败了

这应该不难做到。我错过了什么简单/愚蠢的事情......这完全令人沮丧。

最佳答案

已解决...

经过更多转换后,通过使用“重命名”作为引用命令,它需要包含原始名称的完整路径和包含重命名目标的完整路径。我在其他失败的尝试中没有尝试使用该路径

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);

关于LibCurl SFTP 重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4782872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com