gpt4 book ai didi

c++ - 如何将目录路径转换为唯一的数字标识符 (Linux/C++)?

转载 作者:IT王子 更新时间:2023-10-29 01:05:40 26 4
gpt4 key购买 nike

我正在研究获取目录(文件夹)并派生某种形式的唯一数字标识符的方法。我研究了“字符串到哈希”方法,但是,Pigeon Hole Principle意味着永远无法为每个字符串派生出真正唯一的数字。

唯一散列的字符串是不好的。

我最近一直在研究实现我的目标的其他方法,因此有以下问题要问:

目录时间戳 - 它们有多“独特”?如所述 here,“stat”报告的时间戳的分辨率是多少? (第二个帖子)?如果分辨率足够小,是否有可能在 Linux 系统上多个文件夹共享完全相同的时间戳?

如果有人想分享其他方法/技巧,我很乐意倾听:)

编辑 1 澄清我的用例以回应目前发布的答案:我在 Android 平台上工作,所以文件系统没有链接到任何其他平台(当然除了可移动媒体,例如作为 Micro SD 卡)。

我正在将每个路径插入数据库,但在查询表时试图避免字符串比较。使用 map /散列图在这里不是一个选项。是的,路径本身是唯一的,但理想情况下我需要一个可用于查询表而不是路径本身的数字标识符。每个路径的标识符也必须是唯一的。我已经尝试过 std::collat​​e 但发现哈希中有很多碰撞(20、000 条路径的数据集产生大约 100 次碰撞)。更令人惊讶的是,每次运行我的应用程序时,哈希值似乎都大不相同。我想知道它是否以某种方式播种?

非常感谢,

最佳答案

在任何基于 UNIX 的系统上,您可以使用 inode 编号作为该文件系统中的唯一标识符。将它与设备号结合起来,将使其在机器中是唯一的。如果您希望它在全局范围内唯一,您可以输入系统的主 MAC 地址。

但是请记住:

  1. 如果目录被移动或重命名,inode 编号将“跟随”目录。如果目录被删除和替换,它会改变。

  2. 除了一两个非常特殊的目录之外,inode 编号在系统间并不稳定。 (例如,/ 通常是 inode 2。)

关于c++ - 如何将目录路径转换为唯一的数字标识符 (Linux/C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com