无法使用sharpssh重命名远程文件

时间:2011-09-15 03:24:23

标签: rename sftp sharpssh

我写了如下代码。 但是这段代码不可用......

当我执行时,发生。 如果有人知道的话,给我建议请... 提前谢谢。


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

}

}

2 个答案:

答案 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();

然后它成功地重命名了我的文件。顺便提一下