【问题标题】:Counting SFTP files matching certain criteria using SSH.NET使用 SSH.NET 计算符合特定条件的 SFTP 文件
【发布时间】:2020-05-29 01:02:43
【问题描述】:

我有一个可以从远程服务器中删除日志文件的工作程序(基于某种模式)。现在,当我想获得符合我的标准的文件数时,我遇到了问题。原来我无法直接从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”

【问题讨论】:

    标签: c# .net sftp ssh.net


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多