即使在移动,重命名等之后也要检查它是否是同一个文件

时间:2011-02-22 17:53:26

标签: file

这个问题可能很常见,但由于我不知道与之相关的条款,我无法搜索它(除非Google将整个段落作为搜索查询接受)。

我有一个文件 - 可以是文本文件,MP3文件或视频片段,甚至是巨大的mkv文件。

我可以访问此文件,现在我必须以某种方式处理它,以便我获得某种值或唯一标识符...哈希,或者其他东西。我把它存放在某个地方。这个“哈希”必须很小 - 几个字节。它不应该是文件大小的一半!

稍后,当我再次收到文件时,我必须使用我在步骤1中获得的值来验证它是否是相同的原始文件。这次我将无法访问原始文件。我所拥有的只是第1步的价值。

如果第二个文件包含完全相同的数据 - 每个位 - 作为第一个文件(基本上是同一个文件),即使文件名,属性,位置等都已更改,该算法应返回true。

基本上我需要知道我是否正在处理同一个文件,即使它已移动,重命名并且所有属性都已更改 - 但是当不能同时访问这两个文件时。

这必须是OS或FileSystem独立的。

有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:1)

您正在寻找的是cryptographic hash algorithms。了解他们:

所有强大的语言和库都支持计算哈希值。

答案 1 :(得分:1)

你的困境很简单。每次处理文件时都要获取MD5(或任何算法可以产生单向散列)哈希值。

Here it is in simple steps:
Step 1: Load file stream into a byte array
Step 2: Obtain MD5 hash from byte array
Step 3: Check your db if it already contains hash.
Step 4:    return false if not exist
Step 5:    return true if found
Step 6: If not exist process file
Step 7: Save hash

答案 2 :(得分:0)

通过密钥( file-1(1,20,a), file-2(2,20,a))比较两个文件使用排序卡,匹配的记录应从文件文件-2 移至 file-3(新文件)?