Как вывести список каталогов, используя SSH.NET? - PullRequest
0 голосов
/ 23 мая 2018

Мне нужно перечислить каталоги на моей машине с Ubuntu.

Я сделал это с файлами, но не могу найти аналогичное решение для каталогов.

public IEnumerable<string> GetFiles(string path)
{
    using (var sftpClient = new SftpClient(_host, _port, _username, _password))
    {
        sftpClient.Connect();
        var files = sftpClient.ListDirectory(path);
        return files.Select(f => f.Name);
    }
}

1 Ответ

0 голосов
/ 23 мая 2018

В 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 ))

...