не могу переименовать удаленный файл используя sharpssh - PullRequest
0 голосов
/ 15 сентября 2011

я написал как следующий код.но этот код недоступен ...

когда я выполняю, происходит.если кто-то что-то знает, дайте мне совет, пожалуйста ... спасибо заранее.


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 ]

1 голос
/ 22 февраля 2016

Текущий пакет NuGet по-прежнему имеет версию 1.1.1.13, которая не содержит метод Rename.Было бы замечательно, если сопровождающий пакета мог бы обновить его.

Но в то же время, если кому-то еще это нужно с текущим пакетом NuGet, вот решение на основе метода расширения на основе Reflection.Не приятно, но по крайней мере я могу использовать пакет без разветвления / восстановления и т. Д.

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);
}
0 голосов
/ 14 февраля 2012

Я добавил ваш

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

тогда он успешно переименовал мой файл. Спасибо, кстати

...