2

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

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

2 回答 2

1

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 中)。

于 2016-01-08T16:58:31.017 回答
0

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

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();
于 2016-01-08T23:34:44.597 回答