2014-02-10 135 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這是一個密碼強的隨機數發生器,所以這個機會非常低。

總而言之,你不能以嚴格的方式保證它是唯一的。但重複的機會非常低,所以你可以假設它是。

相關問題