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

本文关键字:程目录 文件 获取 模式 何使用 WinSCP | 更新日期: 2023-09-27 18:29:34

我试图通过FTP/SFTP连接从远程服务器获取特定的文件,我遇到的问题是,我试图通过特定的模式获取远程目录中的文件数。我正在使用口罩,但对我不起作用,这引发了一个例外:这就是我的

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

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

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();