合并目录中的文件,每次都附加换行符

时间:2012-11-01 19:17:26

标签: c# file io streamwriter

我在一个目录中有一堆txt文件,我想将它们合并到一个文件中。在每个文件的末尾,我想附加一个回车/新行。

在c#中执行此操作的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

单行程可能非常依赖内存消耗:

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

希望你能在最后获得额外的换行符。

答案 1 :(得分:1)

我不会为你编写代码,但我会指出你正确的方向。

答案 2 :(得分: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()添加到第一行的末尾即可。内存使用率当然会增加,但是你可以更快地完成工作,特别是成千上万的文件。

答案 3 :(得分: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();

    }