WinSCP Session.EnumerateRemoteFiles 的多个文件掩码
Multiple file mask for WinSCP Session.EnumerateRemoteFiles
我正在重建系统监视器应用程序的 FTP 部分,必须能够下载任何文件:
- .csv
- .xlsx
- .xls
当我尝试设置该掩码时,它返回 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();
我正在重建系统监视器应用程序的 FTP 部分,必须能够下载任何文件:
- .csv
- .xlsx
- .xls
当我尝试设置该掩码时,它返回 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();