2017-04-10 116 views
0

我有一个包含许多行的文件。有一条线在这里寻找象下面这样:如何向文件中以“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的“你好”,但我不知道如何文本添加到该行

+0

覆盖txt文件的行后你想覆盖与新线的txt文件? – CNuts

回答

0

你应该使用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); 
+0

感谢CNuts :-)它工作的魅力,我认为对我来说它更有意义,非常感谢 – developi

+0

@developi不客气:) – CNuts

0

试试这个:

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); 

事实上,一个文件可能被分成磁盘上的几个片段,但即便如此,每个片段都会作为整体的一部分呈现给您的程序。

+0

嗨,我想只是将我的文本添加到该行,就是这样! – developi

+0

你需要将这个保存到文件吗?或只是在控制台上显示? –

+0

只是为了保存在文件 – developi

相关问题