C# - 统一差异/补丁创建者

时间:2011-01-14 02:58:16

标签: c# diff

我在C#WPF应用程序中有两个字符串,并希望生成统一的diff文件(格式为GNU diff符号,如Subversion和TortoiseSVN中使用的补丁)。

是否有一个库可以为我做这个而不是重新创建轮子?

我一直在搜索谷歌而没有成功。 :(

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

是的,我知道这是一个陈旧的问题,但它仍然与我目前的项目有关。所以,如果这对其他人有帮助,我会提供一个博客文章的链接,显示我最后编写的程序来调用GNU diff.exe程序。

https://renniestechblog.com/information/37-generate-diff-and-fuzzy-patch-programs

这是调用GNU diff.exe程序的最重要的部分。 (这段代码引用了程序其他部分的一些内容,但应该可以猜出它是如何工作的。)

  /// <summary>
  /// Method to use the GNU diff.exe program to create a .diff file for a Roslyn file which has 
  /// been modified.
  /// 
  /// This currently uses the GNU diff.exe program that happens to have been installed on my 
  /// developer PC as part of the GitHub Desktop for Windows program installation.
  /// </summary>
  private static void CreateDiffFile(string archiveFileName, string currentFileName)
  {
     const string CGnuDiffExe = 
        @"C:\Users\rp\AppData\Local\GitHub\PortableGit_f02737a78695063deace08e96d5042710d3e32db\usr\bin\diff.exe";

     string diffFileName = GetDiffFileName(currentFileName) + ".diff";
     Directory.CreateDirectory(Path.GetDirectoryName(diffFileName));

     using (Process windowsProcess = new Process())
     {
        windowsProcess.StartInfo.UseShellExecute = false;
        windowsProcess.StartInfo.FileName = CGnuDiffExe;
        windowsProcess.StartInfo.Arguments = 
                                "-u -r \"" + archiveFileName + "\" \"" + currentFileName + "\"";
        windowsProcess.StartInfo.RedirectStandardOutput = true;
        if (!windowsProcess.Start())
           DisplayErrorOrInfo("Unexpected result for Process.Start()");
        File.WriteAllText(diffFileName, windowsProcess.StandardOutput.ReadToEnd());
        windowsProcess.WaitForExit();
     }

     Console.WriteLine("Diff file created: " + diffFileName);
  }

答案 2 :(得分:0)

找到一个解决方案。请注意,程序集不受支持,据报道有错误,但我用它来比较复杂的XHTML,它运行得很好!

http://razor.occams.info/code/diff/

请注意,它是在PERL许可下发布的(请参阅网站)。

下载Diff.dll并将其添加到您的解决方案中。

网站上有一个很好的例子。