我在C#WPF应用程序中有两个字符串,并希望生成统一的diff文件(格式为GNU diff符号,如Subversion和TortoiseSVN中使用的补丁)。
是否有一个库可以为我做这个而不是重新创建轮子?
我一直在搜索谷歌而没有成功。 :(
答案 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并将其添加到您的解决方案中。
网站上有一个很好的例子。