如何使用 SharpSsh 和 C# 将文件从一个文件夹移动到远程服务器上的另一个文件夹

How to move a file from one folder to another folder on a remote server using SharpSsh and C#

如何使用 SharpSsh 将文件从一个文件夹移动到远程服务器上的另一个文件夹?

我正在尝试将服务器文件夹中的文件移动到另一个服务器文件夹。

我得到:

ERROR: No se pudo encontrar el archivo '/local/opt/oracle/oradata/UTL_DIR/PEDIMENTOS/pedimento.csv'.

Cannot find file '/local/opt/oracle/oradata/UTL_DIR/PEDIMENTOS/pedimento.csv'

这是我的代码:

Tamir.SharpSsh.Sftp ClientSFTP = new Tamir.SharpSsh.Sftp(pHost, pUserName, pPassword);
try
{
    string FechaActual = DateTime.Today.ToString("yyyyMMdd");
    string pFilePEDIMENTOS = "/local/opt/oracle/oradata/UTL_DIR/PEDIMENTOS/pedimento.csv";
    string pFilePROCESADO = "/local/opt/oracle/oradata/UTL_DIR/PEDIMENTOS/PROCESADO/pedimento" + FechaActual + ".csv";

    //Abre sesion
    ClientSFTP.Connect();
   
    if (ClientSFTP.Connected)
    {
        // ejecutar el comando
        ClientSFTP.Put(pFilePEDIMENTOS, pFilePROCESADO);//SEGUIR INVESTIGANDO
    }
    else
    {
        throw new Exception("Error de Conexion con el Servidor Remoto");
    }
}
catch (Exception ex)
{
    lblError.Text = ex.Message;
}
finally
{
    //cerrar conexion SFTP
    ClientSFTP.Close();
}

我假设您使用的Put方法是将文件从本地计算机(客户端)传输到远程服务器。该方法不适用于移动远程服务器上的文件。

要移动文件,您需要使用 SSH 客户端并发出远程命令 shell 进行解释(如果您知道它是 linux,则 运行 "mv" in shell 即可),或者,如果您没有 SSH 访问权限,您可以尝试使用支持 "Rename" SFTP 命令的体面的 SFTP 客户端(例如我们的 SecureBlackbox)(远程文件可以是 "renamed"这样)。不过,并非所有服务器都支持此命令。

首先,不要使用 SharpSSH,它是一个死项目。

使用另一个 SFTP 实现。参见 SFTP Libraries for .NET


无论如何,如果你必须使用它(有充分的理由),请使用 SftpChannel.rename 方法。

您不能使用 Sftp class,因为它不公开该方法。

参见 jsch\examples\Sftp.cs 示例。简化代码如下:

Session session=jsch.getSession(pUserName, pHost, 22);
...
session.connect();
...
Channel channel=session.openChannel("sftp");
ChannelSftp c=(ChannelSftp)channel;
...
c.rename(pFilePEDIMENTOS, pFilePROCESADO);

与"rename"或"move"基本相同的操作。 .Put 用于将本地文件上传到远程位置。