c# - 使用 SSH.NET 从 Ubuntu 服务器上的文件中删除行
问题描述
在配置文件中/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.NETSftpClient.WriteAll*
方法的实现方式——它们不会删除以前的内容。
请改用此代码:
using (var writer = new StreamWriter(sftpClient.Create("/sftp/sftpuser/test.txt")))
{
foreach (var line in newLines)
{
writer.WriteLine(line);
}
}
推荐阅读
- android - 将回调函数传递给Android中的自定义视图
- batch-file - 我有多个包含阿拉伯语值的 .sql 文件,当我在 .bat 文件中使用 sqlcmd 运行它们时,数据库中无法识别阿拉伯语
- tensorflow - ValueError: Expect x to be an non-empty array or dataset (Tensor Flow lite model maker on Collab)
- javascript - json元素可以有不同的属性吗?
- flutter - 自定义 FlexibleSpaceBar 小部件
- ios - 我无法在 iOS 中安装 FireStore pod
- sql-server - 如何将零添加到基数中的 nvarchar 到 id len
- javascript - 如何从左到右为圆形进度条设置动画?(纯js)
- c - 将可变数量的参数打印到格式字符串
- php - PHP Laravel curl在foreach循环504网关超时错误