如何向文件中以“hello”开头的行添加文本
问题描述:
我有一个包含许多行的文件。有一条线在这里寻找象下面这样:如何向文件中以“hello”开头的行添加文本
hello jim jack nina richi sam
我需要在此行中添加特定的文本salmon
并将其更改为以下(它可在任何地方在这条线末端添加-begining - 中间 - 并不重要):
hello jim jack nina richi sam salmon
我想:
string path = @"C:\testFolder\newTestLog.txt";
StreamReader myReader = new StreamReader(path);
string[] allLines = File.ReadAllLines(path);
foreach (string element in allLines) {
if (element.StartsWith("hello"))
{
Console.WriteLine(element);
}
}
myReader.Close();
}
使用这个我能够逐行读取文件中的行每行添加到一个数组和打印如果开始即行s的“你好”,但我不知道如何文本添加到该行
答
你应该使用Joel回答的更好,但如果你在实施时遇到困难,试试这个。加入salmon
到以hello
开始,你可以通过使用File.WriteAllLines
string filePath = @"C:\testFolder\newTestLog.txt";
string[] allLines = File.ReadAllLines(filePath);
for(int i = 0; i < allLines.Length; i++)
{
if (allLines[i].StartsWith("hello"))
{
allLines[i] += " salmon";
}
}
File.WriteAllLines(filePath, allLines);
答
试试这个:
string path = @"C:\testFolder\newTestLog.txt";
var lines = File.ReadLines(path).Select(l => l + l.StartsWith("hello")?" salmon":"");
foreach (string line in lines)
Console.WriteLine(line);
需要注意的是,这仍然为您的样品做的结果只能写入控制台。目前还不清楚你真的想在输出中发生什么。
如果你想把它保存到原始文件,你已经打开了一小罐蠕虫。考虑文件中的所有数据,就好像它存储在一个连续的块中。如果将文本追加到文件中的任何一行,该文本无处可去,而是覆盖下一个文本的开头。实际上,如果你需要修改文件,通常意味着要么写出一个完整的文件,然后在完成时删除/重命名,或者将整个文件保存在内存中,并从头到尾全部写入。
使用第二方法,我们在内存中保存的一切,你可以这样做:
string path = @"C:\testFolder\newTestLog.txt";
var lines = File.ReadAllLines(path).Select(l => l + l.StartsWith("hello")?" salmon":"");
File.WriteAllLines(path, lines);
事实上,一个文件可能被分成磁盘上的几个片段,但即便如此,每个片段都会作为整体的一部分呈现给您的程序。
覆盖txt文件的行后你想覆盖与新线的txt文件? – CNuts