基于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
相关产品推荐
相关产品推荐

