如何使用 SSH.NET 列出目录?

How to list directories using SSH.NET?

我需要列出我 Ubuntu 机器上的目录。

我用文件做到了,但找不到类似的目录解决方案。

public IEnumerable<string> GetFiles(string path)
{
    using (var sftpClient = new SftpClient(_host, _port, _username, _password))
    {
        sftpClient.Connect();
        var files = sftpClient.ListDirectory(path);
        return files.Select(f => f.Name);
    }
}

在类 Unix 操作系统上,包括 Linux、directories are files - 因此您的 ListDirectory 结果将 return "files"(传统意义上)和目录合并。您可以通过检查 IsDirectory:

来过滤掉那些
public List<String> GetFiles(string path)
{
    using (SftpClient client = new SftpClient( _host, _port, _username, _password ) )
    {
        client.Connect();
        return client
            .ListDirectory( path )
            .Where( f => !f.IsDirectory )
            .Select( f => f.Name )
            .ToList();
    }
}

public List<String> GetDirectories(string path)
{
    using (SftpClient client = new SftpClient( _host, _port, _username, _password ) )
    {
        client.Connect();
        return client
            .ListDirectory( path )
            .Where( f => f.IsDirectory )
            .Select( f => f.Name )
            .ToList();
    }
}

(我将 return 类型更改为具体的 List<T> 因为如果 ListDirectory 是 return 延迟计算的可枚举,那么 using() 块将在操作完成之前使父对象 SftpClient 无效——这与您从 using( DbContext ))

中从未 return 一个 IQueryable<T> 的原因相同