那是一个复杂的问题。执行差异操作意味着查找两个文件之间的最小编辑距离,也就是将一个文件转换为另一个文件所需进行的最少更改次数。这相当于在两个文件之间查找行的最长公共子序列,这是各种差异程序的基础。最长公共子序列问题是众所周知的,您应该能够在谷歌上找到动态规划解决方案。动态规划方法的问题在于它的时间复杂度是O(n^2)。因此,在处理大文件和大型二进制字符串时速度非常慢,无法使用。编写差异程序的难点在于针对您的问题领域优化算法,以获得合理的性能(和合理的结果)。Hunt和McIlroy的论文“差分文件比较算法”提供了Unix diff实用程序早期版本的良好描述。
有许多库可供使用,这是其中之一:http://code.google.com/p/google-diff-match-patch/ StackOverflow 在其差异比较中使用Beyond Compare。我相信它通过从命令行调用Beyond Compare来进行。