WinSCP.SessionRemoteException:将文件复制到远程端失败。无法更改为“ / ftp:/”;找不到“ ftp:”

dsp*_*ank 2 c# ftp winscp winscp-net

enter code here我将文件放在远程FTP服务器上时遇到问题。

我正在使用带有C#的WinSCP .NET程序集。

我能够连接到FTP服务器,但是当我尝试使用session.PutFile(local,remote)它时,它会跳到transferResult.Check()一个错误:

{WinSCP.SessionRemoteException:传输文件'C:\ testfile.txt时出错。---> WinSCP.SessionRemoteException:将文件复制到远程端失败。无法更改为“ / ftp:/”;找不到“ ftp:”。

请在下面找到我的代码。

private static void transferWinSCP()
{
    string userName = myUsername;
    string password = myPassword;
    string path = ftp://hostname.com/f/fofd671e-0eee-4c23-932d-4ba32c938c8f;
    string logPath = ConfigurationManager.AppSettings["LogPath"];**
    try
    {
        SessionOptions sessionOptions = new SessionOptions
        {
            Protocol = Protocol.Ftp,
            HostName = "hostname.com",
            PortNumber = 990,
            UserName = userName,
            Password = password,
            FtpSecure = FtpSecure.Implicit,
            FtpMode = FtpMode.Passive,
            TlsHostCertificateFingerprint = "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
        };

        using (Session session = new Session())
        {

            session.SessionLogPath = logPath;

            //connect
            session.Open(sessionOptions);

            //upload
            TransferOptions transferOptions = new TransferOptions {TransferMode = TransferMode.Binary};

            TransferOperationResult transferResult = session.PutFiles(@"C:\testfile.txt",url, false,
                    transferOptions);
            transferResult.Check(); //ftp error

            foreach (TransferEventArgs transfer in transferResult.Transfers)
            {
                Console.Write("upload of {0} succeeded", transfer.FileName);
            }
        }
    }
    catch (Exception ex)
    {
        Console.Write("error {0}", ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的日志文件:

private static void transferWinSCP()
{
    string userName = myUsername;
    string password = myPassword;
    string path = ftp://hostname.com/f/fofd671e-0eee-4c23-932d-4ba32c938c8f;
    string logPath = ConfigurationManager.AppSettings["LogPath"];**
    try
    {
        SessionOptions sessionOptions = new SessionOptions
        {
            Protocol = Protocol.Ftp,
            HostName = "hostname.com",
            PortNumber = 990,
            UserName = userName,
            Password = password,
            FtpSecure = FtpSecure.Implicit,
            FtpMode = FtpMode.Passive,
            TlsHostCertificateFingerprint = "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
        };

        using (Session session = new Session())
        {

            session.SessionLogPath = logPath;

            //connect
            session.Open(sessionOptions);

            //upload
            TransferOptions transferOptions = new TransferOptions {TransferMode = TransferMode.Binary};

            TransferOperationResult transferResult = session.PutFiles(@"C:\testfile.txt",url, false,
                    transferOptions);
            transferResult.Check(); //ftp error

            foreach (TransferEventArgs transfer in transferResult.Transfers)
            {
                Console.Write("upload of {0} succeeded", transfer.FileName);
            }
        }
    }
    catch (Exception ex)
    {
        Console.Write("error {0}", ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ryl 5

方法remotePath参数为:Session.PutFiles

上传文件的完整路径。上传多个文件时,路径中的文件名应替换为操作掩码或省略(路径以slash结尾)。

您传递的不是路径,而是URL。做什么的?您已经在中指定了主机名和协议SessionOptions

仅使用路径。

同样,由于路径是目标文件夹名称(而不是目标文件名),因此路径必须以斜杠(或文件名)结尾。

string path = "/f/fofd671e-0eee-4c23-932d-4ba32c938c8f/";
...
session.PutFiles(@"C:\testfile.txt", path, false, transferOptions);
Run Code Online (Sandbox Code Playgroud)

请参阅官方示例,以使用WinSCP .NET程序集上传文件