当目标路径存在时,卷曲SFTP重命名

时间:2015-04-15 15:59:53

标签: c++ curl sftp libcurl libssh2

我必须使用SFTP传输和libcurl定期更新服务器上的文件。从许多来源和个人经验中,我发现当目标路径指向已存在的文件时,使用curl和SFTP重命名命令失败。但是sftp客户端不能以这种方式工作 - 相同的命令会覆盖现有文件。是不是真的有办法在libcurl上强制执行此行为。我知道首先删除文件的选项,但是如果文件不存在则它会失败并且它仍然是一种解决方法而不是我的解决方案。

编辑: libcurl引发了libssh2_sftp_rename_ex的LIBSSH2_SFTP_RENAME_OVERWRITE标志,但它似乎对某些版本的协议/服务器不起作用

解决方法: 添加命令" * rm"这指出rm可能失败

1 个答案:

答案 0 :(得分:1)

我很确定原因是在curl无法通过SFTP重命名文件的情况下,这是因为服务器拒绝它。我们已经看到它有时会被某些服务器发生,即使curl发送“强制覆盖”选项。

其他客户可能工作的原因可能是他们在rm + mv下工作,或者可能是因为他们与服务器协商不同的SFTP协议版本(从而获得不同的行为)。

相关问题