Подсчет файлов SFTP, соответствующих определенным критериям, с помощью SSH.NET

У меня есть рабочая программа, которая удаляет файлы журналов с удаленного сервера (по определенному шаблону). Теперь, когда я хочу получить количество файлов, соответствующих моим критериям, у меня возникают проблемы. Оказывается, я не могу напрямую получить счет из файлового объекта SftpFile. Я могу получить количество файлов только после установки точки останова.

Я могу удалить файлы, используя:

private void ListDirectory(SftpClient client, String dirName)
{
    var fileext = ".log";
    var fileextension = fileext.ToString();

    foreach (SftpFile file in client.ListDirectory(dirName))
    {
        var logFilePath = file.FullName;
        var fileCount = client.ListDirectory(dirName).GetEnumerator();

        if ((file.Name != ".") && (file.Name != "..") && file.Name.EndsWith(fileextension))
        {
            Console.WriteLine(file.FullName);
            client.Delete(logFilePath);
            Console.ReadKey();
        }
    }
}

И когда я устанавливаю точку останова, я могу получить счет от вложенного объекта этой строки:

var fileCount = client.ListDirectory(dirName).GetEnumerator();

У меня есть снимок отладки:

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

Теперь мне нужен способ прямого доступа к количеству файлов для моего шаблона, то есть в этой строке:

if ((file.Name != ".") && (file.Name != "..") && file.Name.EndsWith(fileextension))

Когда я пытаюсь применить Linq, как показано ниже:

 var fileCount = client.ListDirectory(dirName).Where((file.Name != ".") && (file.Name != "..") && file.Name.EndsWith(fileextension)).Count();

Я получаю дополнительное исключение, говоря

Невозможно преобразовать из 'bool' в 'system.func


person Golide    schedule 29.05.2020    source источник


Ответы (1)


Синтаксис, который у вас есть в Where аргументе метода, не является допустимой лямбда-функцией, вы пропустите список параметров. Должен быть:

.Where(file => (file.Name != ".") && (file.Name != "..") && file.Name.EndsWith(fileextension))

Также не вызывайте ListDirectory повторно, пусть только на каждой итерации.

var files = client.ListDirectory(dirName);
files = files.Where(file => (file.Name != ".") && (file.Name != "..") && file.Name.EndsWith(fileextension));
int count = files.Count();
foreach (SftpFile file in files)
{
    // ...
}
person Martin Prikryl    schedule 29.05.2020