I'm rebuilding the FTP portion of a system monitor app, has to be able to download any file that is:
and when I try to setup that mask, its returning 0 files, but if I pick just one of them, it works perfectly.
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");
}
I've tried a couple things and nothing is working the way I want it to.
The mask
argument of Session.EnumerateRemoteFiles
is Windows wildcard. There's no way to match multiple extensions with Windows wildcard.
But you can filter the files yourself. For example using a regular expression:
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();