2017-01-09 48 views
0

我经常使用文件路径为某些软件系统提供某种唯一的ID。有没有办法以相对快速(计算)的方式将文件路径变成独特的整数?将唯一文件路径转换为唯一整数

我对大整数还可以。据我所知,这将是一个非常漂亮的算法,但在某些情况下会非常有用。

有人知道这样的事情是否存在?

+0

也许这回答我的问题:http://stackoverflow.com/questions/12238228/how-do-i-convert-a-directory-path-to-a-unique-numerical-identifier-linux-c –

+0

如果你在内存中运行它,你可以使用相应语言的标准hashmaps之一。不仅仅是文件名称,而是任何类似的情况。 –

+0

你的意思是散列文件名到一些独特的整数? –

回答

1

你可以尝试的inode编号:

fs.statSync(filename).ino 
1

@ djones的索引节点号的建议是好的,如果程序只有一台机器上运行,你不关心一个新的文件复制的id一个旧的,删除的。 Inode号码被重新使用。

另一个简单的方法是将路径散列到一个大整数空间。例如。使用128位murmurhash(在Java中我使用Guava Hashing类;有几个js端口),在十亿条路径之间发生冲突的可能性仍然是1/2^96。如果你确实是偏执狂,那么保留一组你已经使用过的散列值,并在碰撞时重新散列。

1

这只是我的评论转向了一个答案。 如果你在内存中运行它,你可以使用相应语言的标准hashmaps之一。不仅仅是文件名称,而是任何类似的情况。通常,不同编程语言的hashmaps正在满足桶的冲突,所以散列号和相应的桶号将提供唯一的id。

顺便说一下,编写你自己的hashmap并不难,这样你就可以控制底层结构(例如检索数字等)。

+0

在我的情况下,与多个进程(不是全部相同的共享内存),它可能是对此很难 –

+0

是的,这可能不容易,但为了克服这个问题,你可以编写一个维护这个hashmap的服务。通常,一个体面的编程语言也支持并发。因此,从所有其他应用程序中,您可以调用该服务给您一个唯一的号码。不时(例如midnights),您可以通过该服务自动将这些唯一号码保存在数据库或文件中。这样你就不会失去信息。 –

相关问题