我正在制作一个应用程序,它将保存某些文件的信息。我想知道跟踪文件的最佳方法是什么。我正在考虑使用文件的绝对路径,但如果文件被重命名,那可能会改变。我发现如果你运行 ls -i 每个文件旁边都有一个唯一的 ID(?)。可以用于唯一的文件ID吗?
问问题
4357 次
2 回答
2
每个设备的 inode 都是唯一的,但我不建议使用它,因为假设您的机器崩溃并且您将所有文件移动到新文件系统,现在您的所有文件都有新的 id。
这实际上取决于您选择的语言,但几乎所有语言都包含一个用于生成 UUID 的库。虽然理论上可能发生碰撞,但它确实不是问题。生成 UUID 并将其添加到文件的前面,然后您就可以开展业务了。随着实现的增长,它还允许您创建文件的 HashTable 索引,以便以后快速查找。
于 2012-04-29T17:53:40.227 回答
0
问题是,“在什么方面独一无二?”
如果您在给定的时间点在给定的机器上需要一些独特的东西,那么是的,inode 号 + 设备号几乎总是唯一的 - 这些可以从 C 中的 stat() 或类似的东西,python 中的 os.stat() 获得. 但是,如果您删除一个文件并创建另一个文件,则可能会重复使用该 inode 编号。此外,两个不同的主机可能对设备、inodeno 对的概念完全不同。
如果您需要一些东西来描述文件的内容(因此具有相同内容的两个文件具有相同的 id),您可以查看 SHA 或 RIPEMD 函数之一。这将是非常独特的——意外碰撞的几率非常低。
如果您需要其他形式的唯一性,请详细说明。
于 2012-04-29T20:57:51.330 回答