Windows资源管理器扩展:文件比较与哈希计算

在本文中,将探讨一个Windows资源管理器的扩展程序,它不仅提供了文件比较的功能,还允许用户计算文件的MD5、SHA1、SHA256哈希值。这种类型的工具对于验证文件完整性和进行文件内容比较非常有用。

文件比较和完整性校验工具已经存在很长时间了。即使是MS-DOS也有这样的工具(只需在DOS命令提示符下输入fc /?)。但是,使用这些工具并不十分用户友好。Windows资源管理器允许使用COM对象作为扩展,这种集成通常非常方便。

.NET框架和一些库,如Dave Kerr的工具,使得编写外壳扩展变得更加容易。还有一些不错的文本差异工具,如Christopher Erker的DeltaScope,它们缺少外壳集成,所以将这些组件组合在一起,添加了一些自己的想法,比如Levenshtein距离,并创建了这个旨在易于使用且同时提供有用功能的扩展。

如何使用代码

Windows资源管理器集成的代码在很大程度上依赖于SharpShell项目。为了给一个关于如何向Windows资源管理器的上下文菜单添加额外项目的示例,下面是一个扩展SharpContextMenu类的代码片段:

protected override ContextMenuStrip CreateMenu() { // 创建菜单栏 _menu = new ContextMenuStrip(); // 创建一个包含所有子项的菜单项 _rootItem = new ToolStripMenuItem { Text = "Compare&&Hash", Image = FileCompareByHash.Resource.compare22 }; // 现在添加子项 _binaryCompareItem = new ToolStripMenuItem { Text = "Binary Compare with..." }; _binaryCompareItem.Click += (sender, args) => CompareAgainst(sender as ToolStripMenuItem); _textCompareItem = new ToolStripMenuItem { Text = "Text Compare with..." }; _textCompareItem.Click += (sender, args) => CompareAgainst(sender as ToolStripMenuItem); // 更多代码... }

这段代码展示了如何创建一个上下文菜单,并添加了比较和哈希计算的选项。

Levenshtein距离的实现

Levenshtein距离是一种衡量两个字符串差异的方法。在文本文件比较中,使用它来给出一个大致的文本内容相关度。它在小尺寸的文本文件上应该表现良好。以下是用来计算Levenshtein距离的代码:

static class Levenshtein { static ushort[,] _costMatrix = null; public static ushort LD(string s, string t) { ushort n = (ushort)s.Length; ushort m = (ushort)t.Length; if (_costMatrix == null || _costMatrix.GetUpperBound(0) < n || _costMatrix.GetUpperBound(1) < m) _costMatrix = new ushort[n + 1, m + 1]; // 更多代码... } }

这段代码定义了一个静态类Levenshtein,它包含了计算Levenshtein距离的方法。

使用资源管理器扩展

要比较两个文本文件,只需高亮它们,右键单击选择,并从弹出菜单导航到"Compare&&Hash"->"Compare text files..."或"Compare binary files..."。

如果文件位于不同的文件夹或驱动器上,需要执行额外的步骤,如下所示。

比较不同文件夹中的文件

当要比较的文件位于不同的目录中时,选择第一个文件,右键单击它并选择"Text Compare with..."或"Binary Compare with..."。将出现一个文件对话框,以便选择要比较的文件。选择第二个文件并点击"Open"。根据选择,将显示一个消息框,显示文本差异或显示文件是否相同。

获取单个文件的哈希值

右键单击文件,选择哈希算法,将有机会将特定的哈希值复制到剪贴板。

获取同一文件夹中多个文件的哈希值

如果所有要哈希的文件都位于同一文件夹中,可以选中它们,右键单击并选择哈希算法。将出现一个消息框,显示选定的文件及其相应的哈希值。

注意事项

可以下载整个源代码来重建扩展项目并制作安装脚本,但与SharpShell相关的任何内容仅作为二进制文件存在(再次参见提供的链接以获取代码和更多信息)。

还有一个下载包含一个zip文件,其中包含安装/卸载脚本,以方便使用,其中仅包含二进制文件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485