2014-02-10 100 views
6

path.GetRandomFileName是否每次都会生成一个唯一的文件名?另外,Gettempfilename - 会生成一个唯一的名称吗?path.getrandomfilename是否会每次生成一个唯一的文件名?

+0

你会碰到大约一亿个文件名。根据你愿意接受的碰撞概率,它可能会变得不舒服大约一百万个文件名。 – CodesInChaos

+0

就我个人而言,我会使用128位随机值而不是55位。可能不适合8.3文件名,但DOS是相当死的,所以谁在乎? – CodesInChaos

+1

GetRandomFileName具有与熵无关的次要动机。尽管NTFS支持很长的路径名,但除了最新版本以外,.NET的大多数版本都限于MAX_PATH。在很多用例中,有必要在环境定义的TEMP文件夹下创建几个级别的随机文件夹。 GetRandomFileName以短名称对熵的50多位进行编码,这使得路径过长的错误发生的可能性较小。除此之外,我同意可以遵循相同的逻辑并设计一个使用更多熵的自定义实现。 – rwong

回答

4

两种情况下的简短答案都是肯定的。
实际上,它会生成11个随机字符,这意味着有(26 + 10)^ 11个可能的名称(1.316217e + 17),所以创建相同名称两次的机会都不存在,并且都是实际用途。

欲了解更多信息,我建议你阅读this

和相关MSDNpages

8

在我的系统Path.GetRandomFileName()返回8.3格式的短名称。

是否保证永不返回相同的名称两次?不,你不能保证,就像你不能用任何哈希算法一样。只有有限的名字,所以最终你会得到一个副本。

然而,由于Path.GetRandomFileName()使用RNGCryptoServiceProvider这是一个密码强的随机数发生器,所以这个机会非常低。

总而言之,你不能以严格的方式保证它是唯一的。但重复的机会非常低,所以你可以假设它是。

相关问题