使用SSH.NET对符合特定条件的SFTP文件进行计数

ftf50wuq  于 2023-02-01  发布在  .NET
关注(0)|答案(1)|浏览(146)

我有一个从远程服务器删除日志文件的工作程序(基于某种模式)。现在,当我想得到符合我的标准的文件计数时,我遇到了问题。它变成了我不能直接从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

krcsximq

krcsximq1#

Where方法参数中的语法不是有效的lambda函数,您缺少参数列表。它应该是:

.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)
{
    // ...
}

相关问题