【问题标题】:Merge Files in a directory, with a newline appended each time合并目录中的文件,每次都附加一个换行符
【发布时间】:2012-10-22 10:46:02
【问题描述】:

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

在 c# 中最好的方法是什么?

【问题讨论】:

  • 你试过什么?根据您问题上的标签,您似乎正朝着正确的方向前进。

标签: c# file io streamwriter


【解决方案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() 添加到第一行的末尾即可。内存使用量当然会增加,但您会更快地完成工作,尤其是对于数十万个文件。

【讨论】:

  • +1 因为我学到了新东西 (Directory.EnumerateFiles)
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    我也不为你编写代码,但我使用以下代码来执行此操作,我记得文件名为 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();
    
        }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2016-06-25
        • 2019-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        • 1970-01-01
        • 2013-01-21
        • 2017-08-20
        相关资源
        最近更新 更多