Фильтрация . (эта папка) и .. (родительская папка) в списке каталогов SFTP в C# SSH.NET

Я подключаюсь к хосту SFTP.

На этом хосте есть папка files

введите здесь описание изображения

И один файл в нем.

Мне нужно получить список имен файлов в этой папке (файлы).

Я старался:

using (var client = new SftpClient(FtpFolder, 22, FtpUsername, FtpPassword))
{
    client.Connect();
    client.ChangeDirectory("files");
    var files = client.ListDirectory(".").ToList();
    client.Disconnect();
}

введите здесь описание изображения

Но я думаю, что вместо 1 файла я также получаю ссылку на родительскую папку.

Пожалуйста посоветуй! Спасибо.


person monstro    schedule 17.09.2018    source источник
comment
Просто отфильтровать их? Какое отношение к этому имеет название вашего вопроса?   -  person tkausl    schedule 17.09.2018


Ответы (1)


В протоколе SFTP нет возможности попросить сервер фильтровать файлы для вас. SSH.NET API также не имеет никакой функции для локальной фильтрации файлов. Вы должны сделать это самостоятельно.

Например:

client.ChangeDirectory("files");
var files =
    client.ListDirectory(".").
        Where(file => (file.Name != ".") && (file.Name != "..")).ToList();

Изменение каталога не имеет ничего общего с вопросом. На самом деле в протоколе SFTP нет даже понятия «рабочий каталог». «Рабочий каталог» моделируется только локально библиотекой SSH.NET.

Таким образом, это функционально эквивалентно:

var files =
    client.ListDirectory("/files").
        Where(file => (file.Name != ".") && (file.Name != "..")).ToList();
person Martin Prikryl    schedule 17.09.2018
comment
Для тех, кто натыкается на это, как я, это должен быть принятый ответ и работает. - person t..; 28.06.2019