WinSCP .NET 程序集无法识别 Session.PutFiles 中的 FTP 链接/URL

Posted

技术标签:

【中文标题】WinSCP .NET 程序集无法识别 Session.PutFiles 中的 FTP 链接/URL【英文标题】:WinSCP .NET assembly does not recognize FTP link/URL in Session.PutFiles 【发布时间】:2022-01-18 11:46:20 【问题描述】:

从本地文件夹上传一些 txt 文件到特定的 FTP 地址(我正在使用这个,ftp://ftpint/sales/to_system/)是我的日常工作之一。我正在使用 ZappySys 来自动化这个例程,但我的公司不想再使用它,所以我认为 WinSCP 可能是一个不错的选择。 我已经安装了 WinSCP 5.19 和 .NET 程序集,并按照此链接https://winscp.net/eng/docs/library_ssis 中的说明进行操作。但我认为 WinSCP 无法识别我的 FTP 链接。这是我的 C# 代码,有什么建议吗?谢谢。

using System;
using WinSCP;

class Example

    public static int Main()
    
        try
        
            // Setup session options
            SessionOptions sessionOptions = new SessionOptions
            
                Protocol = Protocol.Sftp,
                HostName = "xxx",
                UserName = "xxx",
                Password = "xxx",
                SshHostKeyFingerprint = "SHA-256 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
            ;

            using (Session session = new Session())
            
                // Connect
                session.Open(sessionOptions);

                // Upload files
                TransferOptions transferOptions = new TransferOptions();
                transferOptions.TransferMode = TransferMode.Binary;

                TransferOperationResult transferResult =
                    session.PutFiles(@"C:\Users\Diomedas\test\*", "ftp://ftpint/sales/to_system/", false, transferOptions);

                // Throw on any error
                transferResult.Check();

                // Print results
                foreach (TransferEventArgs transfer in transferResult.Transfers)
                
                    Console.WriteLine("Upload of 0 succeeded", transfer.FileName);
                
            

            return 0;
        
        catch (Exception e)
        
            Console.WriteLine("Error: 0", e);
            return 1;
        
    

【问题讨论】:

【参考方案1】:

remotePath argument of Session.PutFiles 是一个远程路径。不是任何网址。所以应该是这样的:

session.PutFiles(@"C:\Users\Diomedas\test\*", "/sales/to_system/", false, transferOptions);

您已经在SessionOptions.HostName 中指定了主机名。没有必要重复该信息。

您的协议不匹配。您在SessionOptions.Protocol 中指定了Protocol.Sftp,而您的URL 具有ftp://。确保您知道服务器的实际协议是什么。


WinSCP GUI 可以为你generate full working code (including the upload part)。

【讨论】:

以上是关于WinSCP .NET 程序集无法识别 Session.PutFiles 中的 FTP 链接/URL的主要内容,如果未能解决你的问题,请参考以下文章

使用 WinSCP .NET 程序集防止通过 FTP 传输不完整的文件

使用 WinSCP .NET 程序集比较本地和远程文件

使用 PowerShell 脚本中的 WinSCP .NET 程序集在 Linux 服务器上运行 bash 脚本

SSH 主机密钥指纹...与模式不匹配...在 C# 中使用 WinSCP .NET 程序集下载文件时

如何使用密码或 SSH 指纹进行 SFTP 身份验证 WinSCP C# .NET 程序集

移动到另一个项目时无法识别类型化数据集