2011-09-15 23 views
0

我寫下面的代碼。 但這個代碼是不可用的...無法使用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, ""); 

} 

} 

回答

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

然後重新命名我的文件成功。謝謝順便

+1

我從SftpChannel冒泡重命名方法SFTP以及 - > http://bitbucket.org/mattgwagner/sharpssh – MattGWagner

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