在C#中合并2个文本文件

首先,我想提一下,我几天前才开始学习C#,所以我对它的了解有限。

我正在尝试创建一个程序来解析用户输入的某些短语的文本文件,然后将它们输出到新的文本文档中。

目前,我有一个程序搜索原始输入文件并收集用户输入的选定文本,将这些行复制出来,创建新的文本文件,然后将它们合并在一起,之后再删除它们。

我猜这不是创建这个的最有效的方法,但我只是创建了它,并让它以逻辑庄园工作,让我理解为新手。

代码如下;

private void TextInput1() { using (StreamReader fileOpen = new StreamReader(txtInput.Text)) { using (StreamWriter fileWrite = new StreamWriter(@"*DIRECTORY*\FIRSTFILE.txt")) { string file; while ((file = fileOpen.ReadLine()) != null) { if (file.Contains(txtFind.Text)) { fileWrite.Write(file + "\r\n"); } } } } } private void TextInput2() { using (StreamReader fileOpen = new StreamReader(txtInput.Text)) { using (StreamWriter fileWrite = new StreamWriter(@"*DIRECTORY*\SECONDFILE.txt")) { string file; while ((file = fileOpen.ReadLine()) != null) { if (file.Contains(txtFind2.Text)) { fileWrite.Write("\r\n" + file); } } } } } private static void Combination() { ArrayList fileArray = new ArrayList(); using (StreamWriter writer = File.CreateText(@"*DIRECTORY*\FINALOUTPUT.txt")) { using (StreamReader reader = File.OpenText(@"*DIRECTORY*\FIRSTFILE.txt")) { writer.Write(reader.ReadToEnd()); } using (StreamReader reader = File.OpenText(@"*DIRECTORY*\SECONDFILE.txt")) { writer.Write(reader.ReadToEnd()); } } } private static void Delete() { if (File.Exists(@"*DIRECTORY*\FIRSTFILE.txt")) { File.Delete(@"*DIRECTORY*\FIRSTFILE.txt"); } if (File.Exists(@"*DIRECTORY*\SECONDFILE.txt")) { File.Delete(@"*DIRECTORY*\SECONDFILE.txt"); } } 

正在创建的输出文件只是输出第一个文本输入,然后是第二个。 我想知道是否有可能将它们合并为1个文件,一次1行,因为它是一个连续的文件意味着需要输入1的信息跟随2而不是全部1然后全部2。

谢谢,尼尔。

要将两个文件内容逐行合并到一个合并文件中,您可以使用此替换您的Combination()代码

 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++; } } 

这假定这两个文件不包含相同数量的行。

试试这个方法。 您可以收到三条路径。 文件1,文件2和文件输出。

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

如果pathResult文件存在,则WriteAllText方法将覆盖它。 请记住包含System.IO命名空间。

如果您的输入文件非常大并且内存不足,您也可以尝试将这两个读取器包装起来:

  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); } } } } } 

不过,您必须知道输入文件中有多少行,但我认为它可以让您了解一般的想法。

使用FileInfo扩展,您可以通过执行以下操作合并一个或多个文件:

 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()); } } 

用法

  FileInfo fi = new FileInfo("input"); fi.MergeFiles("output", "File2", "File3");