c# - 使用 SSH.NET 从 Ubuntu 服务器上的文件中删除行

标签 c# .net ssh sftp ssh.net

在配置文件/etc/ssh/sshd_config我想删除从这行开始的4行Match user sftpuser .我已经开发了下面的代码,问题是函数SFTPCLient.WriteAllLines(string path, IEnumerable<string> contents);不会覆盖所有现有内容,但如果新内容比旧内容长,它会将相同的字节替换为新的一次,然后是其余的。

SftpClient sftpClient = new SftpClient("xx.xxx.xxx.xxx", "root", "************");
sftpClient.Connect();
var newLines = new List<string>();
string[] oldlines = sftpClient.ReadAllLines("/sftp/sftpuser/test.txt");
int index = 0;
foreach(string line in oldlines)
{
    if (line.Equals("Match user sftpuser"))
                    {
                        break;
                    }
                    index++;
}

int[] indexdelete = { index, index + 1, index + 2, index + 3 };

for(int i =0; i < oldlines.Length; i++)
       {
                    if (indexdelete.Contains(i)) continue;
                    newLines.Add(oldlines[i]);            
        }         
sftpClient.WriteAllLines("/sftp/sftpuser/test.txt", newLines);
sftpClient.Disconnect();

最佳答案

事实上,这似乎是所有 SSH.NET SftpClient.WriteAll* 的方式方法已实现——它们不会删除以前的内容。
请改用此代码:

using (var writer = new StreamWriter(sftpClient.Create("/sftp/sftpuser/test.txt")))
{
    foreach (var line in newLines)
    {
        writer.WriteLine(line);
    }
}

关于c# - 使用 SSH.NET 从 Ubuntu 服务器上的文件中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62645521/

相关文章:

c# - 为什么即使在 Azure 中配置所需的设置后,我也看不到应用服务中的日志?

c# - MSTest 单元测试断言特定的异常消息

c# - 如何跳出循环

.net - Vb.net 两个逗号分隔的列表

amazon-web-services - 通过 ssh 将存储分配到 AWS 上的特定文件夹

C# 通过 SSH.NET 发送 Ctrl+Y

c# - 如何阻止新修改器?

c# - 在 C# 中创建表单的多个实例(并将它们保留在那里)

c# - 如何从流中准确读取 n 个字节?

java - 如何用 Java 写入 ssh 的标准输入?