You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于WinSCP .NET组件,检查SFTP服务器指定扩展名文件是否存在的C#实现

利用WinSCP .NET组件检查SFTP服务器上的指定扩展名文件(以.xls为例)

我之前做过类似的需求,用WinSCP .NET组件实现SFTP文件检查还是挺顺手的,下面一步步给你讲清楚怎么操作,再附上完整的C#代码。

整体思路

要实现这个需求,核心步骤其实很清晰:

  • 先确保你的项目已经引用了WinSCP .NET组件(最简单的方式是通过NuGet安装WinSCP包)
  • 配置SFTP连接参数,建立与服务器的会话
  • 列出目标远程文件夹下的所有文件/目录
  • 过滤出扩展名是.xls的文件,判断是否存在这类文件

完整C#代码示例

下面的代码可以直接用来检查远程SFTP文件夹中是否存在任意名称的.xls文件,我加了详细的注释方便你理解:

using System;
using System.Linq;
using WinSCP;

class SftpFileChecker
{
    static void Main()
    {
        // 1. 配置SFTP连接参数
        SessionOptions sessionOptions = new SessionOptions
        {
            Protocol = Protocol.Sftp,
            HostName = "your-sftp-server-hostname", // 替换成你的SFTP服务器地址
            UserName = "your-username", // 替换成你的用户名
            Password = "your-password", // 如果用密钥登录,可以换成SshHostKeyFingerprint和PrivateKeyPath
            SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" // 服务器的SSH密钥指纹
        };

        // 2. 使用using语句确保会话资源被正确释放
        using (Session session = new Session())
        {
            try
            {
                // 连接到SFTP服务器
                session.Open(sessionOptions);

                // 3. 指定要检查的远程文件夹路径
                string remoteFolderPath = "/path/to/your/remote/folder"; // 替换成目标远程文件夹路径
                RemoteDirectoryInfo directoryInfo = session.ListDirectory(remoteFolderPath);

                // 4. 过滤出所有扩展名是.xls的文件(忽略大小写)
                var xlsFiles = directoryInfo.Files
                    .Where(file => !file.IsDirectory && 
                        string.Equals(System.IO.Path.GetExtension(file.Name), ".xls", StringComparison.OrdinalIgnoreCase));

                // 5. 判断是否存在.xls文件
                if (xlsFiles.Any())
                {
                    Console.WriteLine("找到.xls文件,列表如下:");
                    foreach (var file in xlsFiles)
                    {
                        Console.WriteLine($"- {file.Name}");
                    }
                }
                else
                {
                    Console.WriteLine("未找到任何.xls文件");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine($"操作出错:{e.Message}");
                throw;
            }
        }
    }
}

关键细节说明

  • 连接方式:如果你的SFTP服务器用的是密钥登录,不需要密码,那就在SessionOptions里配置SshHostKeyFingerprint和PrivateKeyPath(指向你的私钥文件路径),去掉Password配置即可。
  • 大小写问题:代码里用了StringComparison.OrdinalIgnoreCase来比较扩展名,避免因为服务器上的文件是.XLS大写而漏检的情况。
  • 递归检查子文件夹:如果需要检查目标文件夹下所有子文件夹里的.xls文件,可以用递归遍历的方式,或者调用session.EnumerateRemoteFiles方法并指定EnumerationOptions.AllDirectories参数,示例如下:
    var allXlsFiles = session.EnumerateRemoteFiles(remoteFolderPath, "*.xls", EnumerationOptions.AllDirectories);
    
  • 异常处理:一定要记得捕获异常,比如连接失败、权限不足、文件夹不存在这些情况,避免程序崩溃。

内容的提问来源于stack exchange,提问作者Logan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:41:18