我正在研究获取目录(文件夹)并派生某种形式的唯一数字标识符的方法。我研究了“字符串到哈希”方法,但是,鸽子洞原理 http://www.codinghorror.com/blog/2007/12/hashtables-pigeonholes-and-birthdays.html意味着永远无法为每个字符串驱动一个真正唯一的数字。
字符串到唯一的哈希值是不好的。
我最近一直在研究实现我的目标的其他方法,因此有以下问题要问:
目录时间戳 - 它们有多“独特”?如所述,“stat”报告的时间戳的分辨率是多少here http://www.linuxquestions.org/questions/programming-9/how-to-get-directory-time-stamp-in-c-719347/(第二篇文章)?如果分辨率足够小,Linux系统上多个文件夹是否可以共享完全相同的时间戳?
如果有人有其他想要分享的方法/技术,我很乐意倾听:)
Edit 1为了澄清我的用例,以回应迄今为止发布的答案:我正在 Android 平台上工作,因此文件系统不链接到任何其他平台(当然除了可移动媒体,例如 Micro SD 卡)。
我将每个路径插入数据库,但在查询表时试图避免字符串比较。这里不可以选择使用地图/哈希图。是的,路径本身是唯一的,但理想情况下,我需要一个可用于查询表的数字标识符,而不是路径本身。每个路径的标识符也必须是唯一的。我尝试过 std::collate 但发现散列中有很多碰撞(20, 000 条路径的数据集产生大约 100 次碰撞)。更令人惊讶的是,每次运行我的应用程序时,哈希值似乎都有很大不同。我想知道它是否以某种方式播种?
非常感谢,
磷
在任何基于 UNIX 的系统上,您可以使用 inode 号作为该文件系统内的唯一标识符。将其与设备编号结合起来将使其在机器内唯一。如果您希望它是全局唯一的,您可以输入系统的主 MAC 地址。
但请记住:
如果目录被移动或重命名,索引节点号将“跟随”目录。如果删除并替换该目录,它会发生变化。
除了一两个真正特殊的目录之外,索引节点号在不同系统中都不稳定。 (例如,/
通常是 inode 2。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)