2012-07-09 57 views
0

我有2個文件文件A和文件B如何在文件A上覆制行30並將其粘貼到文件B中第30行的頂部我可以在C#中執行此操作嗎?在文本文件中複製行號c#

+3

你到目前爲止試過了什麼?這是可能的,但我希望在給你一些建議之前,看看你已經嘗試過了。 – 2012-07-09 10:55:02

+3

當然你可以做到。 – nunespascal 2012-07-09 10:55:48

+1

請多加努力。 – 2012-07-09 10:56:19

回答

6

這裏有一個非常簡單方式,假定文件B小到足以讀入內存:

string lineFromA = File.ReadLines("fileA.txt").Skip(29).First(); 
string[] linesFromB = File.ReadAllLines("fileB.txt"); 
linesFromB[29] = lineFromA; 
File.WriteAllLines("fileC.txt", linesFromB); 

這裏假設你正在使用.NET 4,以其慵懶File.ReadLines方法。如果你不是,最簡單的方法是仔細閱讀文件加載到內存,使用File.ReadAllLines兩次:

string[] linesFromA = File.ReadAllLines("fileA.txt"); 
string[] linesFromB = File.ReadAllLines("fileB.txt"); 
linesFromB[29] = linesFromA[29]; 
File.WriteAllLines("fileC.txt", linesFromB); 

肯定有更高效方法,但我與上面,除非去我有任何理由需要更高效的。

+0

我寧願用'linesFromB [29] = linesFromA [29]'方法,但都是一樣的; p – leppie 2012-07-09 10:57:36

+0

@leppie:我覺得這樣做還是很簡單的,至少現在我們可以處理一個巨大的文件A即使文件B仍然需要很小。也會包括其他解決方案... – 2012-07-09 10:58:31

0

如果您使用寫入端的流寫器,您會得到一個不佔用大量內存的例程,也可用於更大的文件。

 string lineFromA = File.ReadLines("fileA.txt").Skip(29).First(); 
     using (var fileC = File.AppendText("fileC.txt")) 
     { 
      int i = 0; 
      foreach (var lineFromB in File.ReadLines("fileB.txt")) 
      { 
       i++; 
       fileC.WriteLine(i != 30 ? lineFromB : lineFromA); 
      } 
     }