使用 SSH.NET 计算符合特定条件的 SFTP 文件
Counting SFTP files matching certain criteria using SSH.NET
我有一个可以从远程服务器删除日志文件的工作程序(基于特定模式)。现在,当我想获取符合我的条件的文件数时,我遇到了问题。结果我无法直接从 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();
我得到进一步的异常说
Cannot convert from 'bool' to 'system.func
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)
{
// ...
}
我有一个可以从远程服务器删除日志文件的工作程序(基于特定模式)。现在,当我想获取符合我的条件的文件数时,我遇到了问题。结果我无法直接从 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();
我得到进一步的异常说
Cannot convert from 'bool' to 'system.func
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)
{
// ...
}