c# - 使用校验和进行文件比较

标签 c# algorithm file compare checksum

我正在编写一个程序来查找文件的重复项。

我有两个文件夹,我必须在其中找到重复项。在最坏的情况下,我将不得不将所有文件相互比较。我想生成每个文件的校验和,比较校验和,然后如果校验和相等,则逐字节检查以确保文件完全相同。

问题是什么校验和生成器的速度快到可以在上面浪费时间而不是逐字节检查?

最佳答案

您可以通过获取文件的完整列表然后按长度排序来减少必须进行的比较次数以及 I/O 量。如果两个文件的长度不同,则它们不可能相同。因此,除了获取无论如何都必须获取的目录信息之外,您无需执行任何 I/O 即可消除大量文件。

如果只有两个文件具有相同的长度 X,则您不必为这些文件计算校验和。直接比较就可以了。

如果有三个或更多文件具有相同的长度,那么您最好计算所有三个文件的校验和,比较校验和,然后在校验和匹配时逐字节比较。

关于c# - 使用校验和进行文件比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19706695/

相关文章:

c# - 使用 dotnet run 命令运行时,带有 EF Core 的 .NET Core 控制台应用程序无法运行,抛出身份验证失败异常

algorithm - 是否有用于根据上下文确定单词类型的算法或 API?

c - 在/proc 文件系统中创建的文件的 open 系统调用中返回负值

c编程在linux中创建一个utf8文件

c# - 为什么 .NET Core 中缺少 List<T>.ForEach?

c# - 同时具有 CASE 语句和 SUM 函数的 LINQ 查询

java - 如果 hashString 是纳米时间,Hashing.crc32 是否会生成一个唯一的字符串?

Android:发送要保存在服务器数据库中的文件

javascript - 如何在Unity(5.6.0)中访问文本字段的值?

javascript - 如何使用构造函数创建对象数组?