比较两个文本文件C#

时间:2019-03-19 22:55:54

标签: c#

我需要比较两个txt文件(file1被用作基线,而file2是需要与file1比较的一个),我想找出与file3的区别,包括缺少的行,多余的行和行具有不同的内容。

对于我当前的代码,如果缺少file2中的第二行,则file2中的所有后续行都将写入到file3中。在这种情况下,如何跳过丢失的行而仅找出完全不同的行?有什么想法吗?

int file1LineNo = 0;
int file2LineNo = 0;
string file1lineStr;
string file2Str;
SortedDictionary<int, Object[]> info = new SortedDictionary<int, Object[]>();
string[] file1Lines = File.ReadAllLines(file1Name);
string[] file2Lines = File.ReadAllLines(file2Name);
while (file1LineNo<file1Lines.length)
{
  file1lineStr = file1Lines[file1LineNo];
  if (file1lineStr != null)
  {
    while(file2LineNo<file2Lines.Length)
    {
      file2Str = file2Lines[file2LineNo];
      if (file1LineNo == file2LineNo)
      {
         if(!file2Str.Trim().Equals(file1Str.Trim()))
         {
           Result = false;
           info.Add(rowNumber1++, new Object[]{"", file1lineStr, file2Str});
         }
      break;
      }
     file2LineNo++;
    }
   }
  }
 file1LineNo++;
}
foreach(var infoValue in info)
{
   Object[] objectArr = info.Value;
   for (int I=0; I<objectArr.Length; i++)
  {
    result.WriteResultToFile3(....);
   }
   rowed++;
}
 return Result;
}
}
}

3 个答案:

答案 0 :(得分:2)

这将在两个文件中输出差异,输出差异文件和具有相同内容的文本文件。您可以使用git diff选项进一步修改输出以选择。您可能需要在计算机上安装Git客户端,或者使用NuGet软件包将其嵌入到源代码中。

https://git-scm.com/downloads

using System;
using System.Collections.ObjectModel;
using System.Management.Automation;

namespace PowerShell_Export_Differences
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
        string directory = "C:/PowershellTest";

        using (PowerShell powershell = PowerShell.Create())
        {
            powershell.AddScript(String.Format(@"cd {0}", directory));
            powershell.AddScript(@"git init");
            powershell.AddScript(@"git diff --no-index  Text1.txt Text2.txt > Text3.diff");
            powershell.AddScript(@"git diff --no-index  Text1.txt Text2.txt > Text3.txt");
            Collection <PSObject> results = powershell.Invoke();
            Console.Read();
        }
    }
}
}

示例输出:

enter image description here

答案 1 :(得分:0)

您的问题有点不明确,您确实需要显示一些代码。

说如果您的行基本上是“空白/空白”,请尝试以下操作。

从文件1和文件2中删除所有“空白/空白”行,然后进行比较。

说实话,这有点“笨拙”,但它可以回答您的问题。

显示您已经尝试过的内容(代码方面),而民间人士可能更愿意写点东西。

答案 2 :(得分:-2)

您必须阅读每一行并将行存储在不同的字符串中,然后进行比较。 例如

string s1 =“ first”; //存储您从file1中读取的行

string s2 =“ second”; //存储您从file2中读取的行

if(!s1.Equals(s2))

{

 // store the Result in file3 if there are not Equals.

}

注意:两个文件中行的顺序相同时,此代码有效。