WinSCP Session.EnumerateRemoteFiles 的多个文件掩码

Multiple file mask for WinSCP Session.EnumerateRemoteFiles

我正在重建系统监视器应用程序的 FTP 部分,必须能够下载任何文件:

当我尝试设置该掩码时,它返回 0 个文件,但如果我只选择其中一个,它会完美运行。

string FileMask = "*.csv; *.xlsx; *.xls";

var sessionOptions = new SessionOptions
{
    Protocol = Protocol.Sftp,
    HostName = ConfigurationManager.AppSettings["FtpHost"],
    UserName = ConfigurationManager.AppSettings["FtpUsr"],
    Password = ConfigurationManager.AppSettings["FtpPwd"],
    SshHostKeyFingerprint = ConfigurationManager.AppSettings["SshHostKeyFingerprint"]
};

using (Session session = new Session())
{
    session.Open(sessionOptions);

    List<string> files =
        session.EnumerateRemoteFiles("/", FileMask, EnumerationOptions.AllDirectories)
        .Select(fileInfo => fileInfo.FullName)
        .ToList();

    Console.WriteLine($"Found {files.Count} files");
}

我已经尝试了一些东西,但没有任何东西按我想要的方式工作。

mask argument of Session.EnumerateRemoteFiles 是 Windows 通配符。无法使用 Windows 通配符匹配多个扩展名。

但您可以自己过滤文件。例如使用正则表达式:

Regex mask = new Regex(@"\.(csv|xls|xlsx)$", RegexOptions.IgnoreCase);
List <string> files =
    session.EnumerateRemoteFiles("/", null, EnumerationOptions.AllDirectories)
    .Where(fileInfo => mask.Match(fileInfo.Name).Success)
    .Select(fileInfo => fileInfo.FullName)
    .ToList();