2

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

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

4

4 回答 4

3

可能非常依赖内存消耗的单线:

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

希望你能忍受最后的额外换行符。

于 2012-11-01T19:28:58.627 回答
1

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

于 2012-11-01T19:22:19.833 回答
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()到第一行的末尾。内存使用量当然会增加,但您会更快地完成工作,尤其是对于数十万个文件。

于 2012-11-01T19:33:40.607 回答
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();

    }
于 2012-11-01T19:25:55.587 回答