我经常使用文件路径为某些软件系统提供某种唯一的ID。有没有办法以相对快速(计算)的方式将文件路径变成独特的整数?将唯一文件路径转换为唯一整数
我对大整数还可以。据我所知,这将是一个非常漂亮的算法,但在某些情况下会非常有用。
有人知道这样的事情是否存在?
我经常使用文件路径为某些软件系统提供某种唯一的ID。有没有办法以相对快速(计算)的方式将文件路径变成独特的整数?将唯一文件路径转换为唯一整数
我对大整数还可以。据我所知,这将是一个非常漂亮的算法,但在某些情况下会非常有用。
有人知道这样的事情是否存在?
你可以尝试的inode编号:
fs.statSync(filename).ino
@ djones的索引节点号的建议是好的,如果程序只有一台机器上运行,你不关心一个新的文件复制的id一个旧的,删除的。 Inode号码被重新使用。
另一个简单的方法是将路径散列到一个大整数空间。例如。使用128位murmurhash(在Java中我使用Guava Hashing
类;有几个js端口),在十亿条路径之间发生冲突的可能性仍然是1/2^96。如果你确实是偏执狂,那么保留一组你已经使用过的散列值,并在碰撞时重新散列。
这只是我的评论转向了一个答案。 如果你在内存中运行它,你可以使用相应语言的标准hashmaps之一。不仅仅是文件名称,而是任何类似的情况。通常,不同编程语言的hashmaps正在满足桶的冲突,所以散列号和相应的桶号将提供唯一的id。
顺便说一下,编写你自己的hashmap并不难,这样你就可以控制底层结构(例如检索数字等)。
在我的情况下,与多个进程(不是全部相同的共享内存),它可能是对此很难 –
是的,这可能不容易,但为了克服这个问题,你可以编写一个维护这个hashmap的服务。通常,一个体面的编程语言也支持并发。因此,从所有其他应用程序中,您可以调用该服务给您一个唯一的号码。不时(例如midnights),您可以通过该服务自动将这些唯一号码保存在数据库或文件中。这样你就不会失去信息。 –
也许这回答我的问题:http://stackoverflow.com/questions/12238228/how-do-i-convert-a-directory-path-to-a-unique-numerical-identifier-linux-c –
如果你在内存中运行它,你可以使用相应语言的标准hashmaps之一。不仅仅是文件名称,而是任何类似的情况。 –
你的意思是散列文件名到一些独特的整数? –