如何在文本文件中插入新行而不删除或覆盖同一行中的数据而在C#中没有第二个文件?

时间:2013-12-04 14:09:00

标签: c# text-files

我想在文本文件中间添加几行而不覆盖或删除文本文件中已有的现有数据。例如:

插入新行之前

ABCD1A_GNHM_MODL_LEWLA  
ABCD12A_GGHM_MODL_LEWLA   
ABCD13A_GEHM_MODL_LEWLA     
ABCD14A_GHHM_MODL_LEWLA     
ABCD12A_GGHM_MODL_LEWLA  
ABCD1AW_GVHM_MODL_LEWLA       
ABCD1R_GGHB_MODL_LEWLA   
ABCD1R_GCHM_MODL_LEWLA  

插入新行后

ABCD1A_GNHM_MODL_LEWLA    
ABCD12A_GGHM_MODL_LEWLA  
ABCD13A_GEHM_MODL_LEWLA      
ABCD14A_GHHM_MODL_LEWLA     
AAAAAAA_VVVV_vVVVV_vvVV9  ---- THIS LINE IS INSERTED  
AAEEEE_VVVV_vVVVV_vvVV9   ------THIS LINE IS INSERTED  
ABCD12A_GGHM_MODL_LEWLA  
ABCD1AW_GVHM_MODL_LEWLA     
ABCD1R_GGHB_MODL_LEWLA   
ABCD1R_GCHM_MODL_LEWLA  

对于追踪之后我需要插入数据的行取决于现在在第4行之后考虑的要求我需要插入两行。

任何人都可以建议我怎么做吗?

2 个答案:

答案 0 :(得分:5)

这归结为文件的工作方式。除了再次写入文件的其余部分之外没有任何其他方式,如果它是一个长文件,这将是昂贵的。只追加到最后是相对便宜的。

不要忘记,磁盘上的文件并不关心端点 - 我们在这里讨论的是字节,而不是字符串的集合。

您最好的选择可能是创建一个全新的文件,在首先插入数据之前复制数据,然后添加数据,然后继续复制文件的其余部分。

简短的故事:您不能在文件中间插入任何内容。你总是会覆盖。您必须至少从插入位置向前写入所有字节。

答案 1 :(得分:1)

不是一个很好的解决方案,但您可以像这样创建一个新文件......

var linesArray = File.ReadAllLines("filepath");
var lines = new List<string>(linesArray);
var newLines = new List<string>();
int insertLinesAt = 4;
int counter = 0;

foreach (var line in lines)
{
  if(counter == insertLinesAt)
  {
        newLines.Add("AAAAAAA_VVVV_vVVVV_vvVV9");
        newLines.Add("AAEEEE_VVVV_vVVVV_vvVV9");
  }
    newLines.Add(line);
    counter++;
}

File.WriteAllLines("newFile.txt", newLines);

这是用记事本写的,所以我怀疑有些错误。