如何在C#中使用WinSCP传输仅含数字无字母的文件?
问题原因
你当前的掩码拼接后为Report01|*[A-Z]*.txt,逻辑仅能匹配名为Report01的文件,同时排除所有文件名含大写字母的txt文件,既没有覆盖「仅含数字的txt文件」的匹配规则,也没有实现「排除数字后带字母的文件」的需求。同时你拼接远程路径和掩码时没有添加路径分隔符,也会导致匹配逻辑失效。
调整方案
根据你的核心需求,提供两种实现方式:
方案1:通配符实现(兼容性更好)
适合不需要严格限制文件名仅含数字,仅需要排除「数字后出现字母」的txt文件的场景:
// 匹配所有txt文件,排除所有文件名中数字后紧跟字母的txt文件 string mask = "*.txt|*[0-9][A-Za-z]*.txt"; TransferOperationResult transferResult; // 注意远程路径末尾要加路径分隔符,SFTP协议用/,Windows远程路径请用\ transferResult = session.getFiles("RemoteServerPath/" + mask,"DestinationServerPath",false,transferOptions);
方案2:正则实现(匹配更精准)
适合需要严格匹配「文件名仅由数字组成的txt文件」的场景,WinSCP 5.x及以上版本支持正则掩码:
// 正则匹配:文件名仅含数字、后缀为txt的文件 string mask = @"regex:^\d+\.txt$"; TransferOperationResult transferResult; transferResult = session.getFiles("RemoteServerPath/" + mask,"DestinationServerPath",false,transferOptions);
注意事项
- 如果你的远程服务器是Windows系统,路径分隔符请替换为
\ - 如果仅需要排除大写字母,通配符方案中删除
[A-Za-z]里的a-z即可
内容的提问来源于stack exchange,提问作者Omkar Godse
相关产品推荐
相关产品推荐

