我写了如下代码。 但是这段代码不可用......
当我执行时,发生。 如果有人知道的话,给我建议请... 提前谢谢。
void sftp_OnTransferEnd(string src, string dst, int transferredBytes
, int totalBytes, string message)
{
if (sftp == null)
{
sftp = new Sftp(Const.SFTP_HOST, Const.SFTP_USER, Const.SFTP_PASSWORD);
sftp.Connect();
}
SftpChannel.rename("file/123_Uploading.zip", "file/123_Finished.zip");
}
--------------------------------------------
Sftp.cs
public void Rename(string oldPath, string newPath)
{
SftpChannel.rename(oldPath, newPath);
}
---------------------------------------------
错误发生在以下地方......
---------------------------------------------------------
ChannelSftp.cs
public void rename(String oldpath, String newpath)
{
・
・
・
int i=buf.getInt(); << i == 4
if(i==SSH_FX_OK) return;
throwStatusError(buf, i); << throw error
catch(Exception e)
{
if(e is SftpException) throw (SftpException)e; << thrown error (id >> 4, message >> Failure)
throw new SftpException(SSH_FX_FAILURE, "");
}
}
答案 0 :(得分:1)
当前的NuGet包仍然是版本1.1.1.13
,它不包含Rename
方法。如果软件包维护者可以更新它会很棒。
但与此同时,如果其他人需要使用当前的NuGet包,这里有一个基于反射的扩展方法解决方案。不好,但至少我可以使用包而不用分叉/重建等。
public static void Rename(this Sftp client, string oldName, string newName) {
var channelProperty = client.GetType().GetProperty("SftpChannel", BindingFlags.NonPublic | BindingFlags.Instance);
channelProperty.GetValue(_client, null).CastTo<ChannelSftp>().rename(OldName, newName);
}
答案 1 :(得分:0)
我添加了你的
public void Rename(string oldPath, string newPath)
{
SftpChannel.rename(oldPath, newPath);
}
代码进入Sftp.cs类,我调用它:
var sftp = new Sftp("sftp.example.com", username, password);
sftp.Connect(22);
sftp.Rename(oldValue, newValue);
sftp.Close();
然后它成功地重命名了我的文件。顺便提一下