Merging 2 Text Files in C#

后端 未结 4 575
迷失自我
迷失自我 2020-12-21 01:10

Firstly, i\'d just like to mention that I\'ve only started learning C# a few days ago so my knowledge of it is limited.

I\'m trying to create a program that will par

相关标签:
4条回答
  • 2020-12-21 01:49

    try this method. You can receive three paths. File 1, File 2 and File output.

    public void MergeFiles(string pathFile1, string pathFile2, string pathResult)
    {
        File.WriteAllText(pathResult, File.ReadAllText(pathFile1) + File.ReadAllText(pathFile2));
    }
    

    If the pathResult file exists, the WriteAllText method will overwrite it. Remember to include System.IO namespace.

    Important: It is not recommended for large files! Use another options available on this thread.

    0 讨论(0)
  • 2020-12-21 02:02

    Using a FileInfo extension you could merge one or more files by doing the following:

    public static class FileInfoExtensions
    {
      public static void MergeFiles(this FileInfo fi, string strOutputPath , params string[] filesToMerge)
      {
        var fiLines = File.ReadAllLines(fi.FullName).ToList();
        fiLines.AddRange(filesToMerge.SelectMany(file => File.ReadAllLines(file)));
        File.WriteAllLines(strOutputPath, fiLines.ToArray());
      }
    }
    

    Usage

      FileInfo fi = new FileInfo("input");
      fi.MergeFiles("output", "File2", "File3");
    
    0 讨论(0)
  • 2020-12-21 02:07

    To combine the two files content in an one merged file line by line you could substitute your Combination() code with this

    string[] file1 = File.ReadAllLines("*DIRECTORY*\FIRSTFILE.txt");
    string[] file2 = File.ReadAllLines("*DIRECTORY*\SECONDFILE.txt");
    
    using (StreamWriter writer = File.CreateText(@"*DIRECTORY*\FINALOUTPUT.txt"))
    {
        int lineNum = 0;
        while(lineNum < file1.Length || lineNum < file2.Length)
        {
            if(lineNum < file1.Length)
                writer.WriteLine(file1[lineNum]);
            if(lineNum < file2.Length)
                writer.WriteLine(file2[lineNum]);
            lineNum++;
        }
    }
    

    This assumes that the two files don't contains the same number of lines.

    0 讨论(0)
  • 2020-12-21 02:08

    If your input files are quite large and you run out of memory, you could also try wrapping the two readers like this:

            using (StreamWriter writer = File.CreateText(@"*DIRECTORY*\FINALOUTPUT.txt"))
            {
                using (StreamReader reader1 = File.OpenText(@"*DIRECTORY*\FIRSTFILE.txt"))
                {
                    using (StreamReader reader2 = File.OpenText(@"*DIRECTORY*\SECONDFILE.txt"))
                    {
                        string line1 = null;
                        string line2 = null;
                        while ((line1 = reader1.ReadLine()) != null)
                        {
                            writer.WriteLine(line1);
                            line2 = reader2.ReadLine();
                            if(line2 != null)
                            {
                                writer.WriteLine(line2);
                            }
                        }
                    }
                }
            }
    

    Still, you have to have an idea how many lines you have in your input files, but I think it gives you the general idea to proceed.

    0 讨论(0)
提交回复
热议问题