Подсчет файлов SFTP, соответствующих определенным критериям, с использованием S SH. NET - PullRequest
1 голос
/ 29 мая 2020

У меня есть рабочая программа, которая удаляет файлы журналов с удаленного сервера (по определенному шаблону). Теперь, когда я хочу получить количество файлов, соответствующих моим критериям, у меня возникают проблемы. Оказывается, я не могу напрямую получить счет из файлового объекта 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();

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

enter image description here

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

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.fun c

1 Ответ

2 голосов
/ 29 мая 2020

Синтаксис, который вы используете в аргументе 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)
{
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...