繁体   English   中英

如何使用带有C#和WinSCP的模式获取远程目录的文件

[英]How to get the files of remote directory using a pattern with C# and WinSCP

我正在尝试从具有FTP / SFTP连接的远程服务器中获取特定文件,而我遇到的问题是,我正在尝试以特定模式获取远程目录中的文件数。 我正在使用口罩,但不适用于我,它抛出异常:这就是我所拥有的

DataFile.sRemoteDirectory = "/user/ftpuser/test/";
receivepattern = "Del*";
filesCount =
    session.ListDirectory(
        session.EscapeFileMask(DataFile.sRemoteDirectory + receivepattern))
    .Files.Where(x => !x.IsDirectory).Count();

Session.ListDirectory方法不接受通配符,仅接受路径。


由于WinSCP .NET程序集5.9,因此可以改用Session.EnumerateRemoteFiles方法

filesCount =
    session.EnumerateRemoteFiles(
        DataFile.sRemoteDirectory, receivepattern, EnumerationOptions.None).Count();

在旧版本中,您必须自己过滤Session.ListDirectory返回的文件:

Regex r = new Regex("^Del.*");

filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files
    .Where(x => !x.IsDirectory)
    .Where(x => r.Match(x.Name))
    .Count()

请参阅列出匹配通配符的官方示例文件 (不过在PowerShell中)。

这就是我所做的,并且有效! 希望对某段代码有所帮助,我使用了正则表达式,其中receivepattern是使用的模式:

receivepattern = "^[\\d\\w]*" + receivepattern;
r = new Regex(receivepattern);
filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files.Where(x => !x.IsDirectory).Where(x => r.IsMatch(x.Name)).Count();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM