2012-11-01 28 views

回答

3

一個班輪這很可能是內存消耗非常瘦:

File.WriteAllLines(
    targetFileName, 
    Directory.GetFiles(srcFolder, "*.txt") 
     .SelectMany(f=> 
      File.ReadLines(f).Concat(new[] {Environment.NewLine}))); 

希望你可以在年底額外的換行符生活。

0

我不爲你寫的代碼,要麼,但我用下面的代碼來做到這一點,我記得文件被命名爲的1.txt,2.txt等等,所以我可以通過整個文件夾

private void merge() 
    { 
     string[] fullFile = new string[152]; 
     System.IO.StreamWriter data = new System.IO.StreamWriter(filepath); 
     for (int i = 1; i < 152; i++) 
     { 
      try 
      { 
       string fullfile = System.IO.File.ReadAllText(filepath); 
       data.WriteLine(fullfile + "return\n"); 

      } 
      catch { } 
     } 
     data.Close(); 

    } 
1

下面是使用Directory.EnumerateFiles的聲明性方法,該方法適用於大型目錄,因爲它會在文件名發現時對其進行流式處理。這種方法的

var lines = from file in Directory.EnumerateFiles(directory, "*.txt") 
      from line in File.ReadLines(file).Concat(new[]{Environment.NewLine}) 
      select line; 
File.WriteAllLines(outputFileName, lines); 

優點:

  • ,易於理解
  • 可並行如果你有很多文件(> 10000):

    只需添加.AsParallel()到第一行的結尾。內存使用率當然會增加,但是您可以更快地完成工作,特別是對於數十萬個文件。

+0

+1 cos我學到了一些新東西('Directory.EnumerateFiles') – spender

相關問題