Я использую пакет WinSCP .NET NuGet для доступа к стороннему FTP-серверу, над которым я не контролирую.
Проблема: кажется, что после первоначальной команды LIST
(в которой перечислены все файлы) сервер больше не отображает файлы, присутствующие в каталоге, а только подкаталоги. Однако, если я открою тот же FTP-каталог в FireFox или FileZilla, файлы появятся. Напротив, сам инструмент WinSCP не перечисляет файлы.
Похоже, что WinSCP подчиняется директиве сервера не перечислять эти файлы. Встроенная библиотека .NET FTP (FtpWebRequest
) имеет точно такое же ограничение.
Код, который я использую для доступа к серверу, приведен ниже:
public class FTP
{
private SessionOptions opts = new SessionOptions();
public FTP(string _userName, string _password, string _server)
{
opts.UserName = _userName;
opts.Password= _password;
opts.HostName = _server;
opts.Protocol = Protocol.Ftp;
opts.FtpMode = FtpMode.Passive;
}
public string[] GetFiles(string directory)
{
try
{
using (Session session = new Session())
{
session.Open(opts);
RemoteDirectoryInfo dir = session.ListDirectory(directory);
return dir.Files.Where(x => !x.IsDirectory).Select(x => x.Name).ToArray();
}
}
catch (Exception)
{
throw;
}
}
}
Есть ли обходной путь в WinSCP (или, альтернативно, в другой библиотеке C#), который может правильно справиться с этой ситуацией?
Внешний процесс, такой как PowerShell или пакетная обработка, приемлем, но не идеален.