В Unix-подобных ОС, включая Linux, каталоги являются файлами - поэтому ваш результат ListDirectory
вернет "файлы" (в традиционном смысле) и каталоги вместе.Вы можете отфильтровать их, проверив IsDirectory
:
public List<String> GetFiles(string path)
{
using (SftpClient client = new SftpClient( _host, _port, _username, _password ) )
{
client.Connect();
return client
.ListDirectory( path )
.Where( f => !f.IsDirectory )
.Select( f => f.Name )
.ToList();
}
}
public List<String> GetDirectories(string path)
{
using (SftpClient client = new SftpClient( _host, _port, _username, _password ) )
{
client.Connect();
return client
.ListDirectory( path )
.Where( f => f.IsDirectory )
.Select( f => f.Name )
.ToList();
}
}
(я изменил тип возвращаемого значения на конкретный List<T>
, потому что если ListDirectory
должен был возвращать перечислимое значение с ленивой оценкой, то using()
Блок сделает недействительным родительский объект SftpClient
до завершения операции - по той же причине, по которой вы никогда не вернете IQueryable<T>
из using( DbContext )
)