windows获取文件唯一标识

小宽宽与他的白日梦
  • 3
新手上路,请多包涵

我想在windows系统中获取到文件的唯一标识。当文件改名或移动时,不会改变标识符。
我想到两个方法:

  1. md5(文件大小+修改时间+创建时间)
    这种方法经过测试,发现这种还是有重复的可能性。在一些特殊情况下,很多文件的修改时间和创建时间都是一样的。
  2. md5(文件内容)
    这种方法可以获取到唯一id,但是得读取整个文件,大文件生成相当慢。

请问还有更好的办法吗?


目前想到的最好的办法:
先遍历文件,取所有文件的修改时间和创建时间,如果发现有相同的先把文件时间改写。
然后使用md5(文件大小+修改时间+创建时间)

这个方法性能做好,但可能不适合所有人。大家根据情况使用。

回复
阅读 515
1 个回答
xdsnet
  • 7.4k

你所谓的文件唯一标识存储在什么地方?用来干什么?

这些问题可能和你的获取方式相关的。

你的方法1中md5产生碰撞很正常,至于你嫌弃方法2速度问题,其实可以稍微折中一下

比如你用方法1的数据+上一个固定稍微大一点的方法2数据(比如取4K文件实际头部数据),这样碰撞的可能又会小很多。

如果文件只存在移动或改名的可能,而且移动还是同分区(盘符)内的移动,则还可以直接利用文件首分区块地址,因为这些处理都不涉及改变这个地址。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏