如何使用 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>
的原因相同
我需要列出我 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 )
)
IQueryable<T>
的原因相同