2013-08-06 140 views
-4

目標是創建隨機路徑來存儲文件,以便我可以存儲具有隨機路徑的文件數量。文件存儲位置

回答

3

我真的不知道你爲什麼想要這樣做。大多數(所有?)系統的容量太高,考慮它是不現實的。如果你必須考慮這個問題,那可能還有另一個問題。例如,Mac OS X可以有2.1 billion files per folder。當然,查看文件列表在某些時候可能會有些問題。

如果你想要隨機值,你可以選擇crypto/randmath/rand包。 math/rand包可能更適合這種情況,因爲crypto/rand依賴於系統生成的熵。 math/rand基於種子算法。缺點是你必須檢查碰撞。碰撞的可能性實際上取決於您使用多少個字符。碰撞發生的可能性越小,角色越少。

您可以做的一件事就是使用time軟件包在某個頻率(天,月)下爲文件夾名稱使用時間戳。我會盡量避免隨機的文件名,因爲它會使管理變成一場噩夢。如果有衝突,您可以隨時爲文件名添加後綴。

我假設,當然,你會存儲潛在的大型二進制文件,如圖像。如果你存儲的東西很小(文本文件),你可能要考慮使用數據庫。

+0

@JVK和...?代碼對我來說毫無意義,除了它裏面有「哈希」這個詞。還有其他的軟件包,比如'hash','math/rand'和'time',你可以使用。 – Luke

+0

@JVK你最好的選擇是#瘋狂freenode IRC頻道。 – Luke

0

如果您希望路徑爲「隨機」並且不與其他路徑衝突,請使用SHA-1來散列文件名。碰撞的機率是extraordinarily miniscule。如果你需要的路徑很短,只需要一個散列的子串,雖然這顯然增加了你的路徑衝突的機會顯着(這可能會或可能不是你的問題)。

+0

首先,它仍然具有與大多數方法一樣多的「隨機性」。其次,這聽起來像是一個完全人爲的用例。爲什麼你只有兩個目錄?爲什麼他們必須是兩個字符?最重要的是,爲什麼要經歷隨意目錄的痛苦呢? –

+1

對於幾乎任何應用程序,1億個文件是一個荒謬的數字。這聽起來像你真正想要的是一個數據庫。如果你堅持這個架構,並且你的要求是「隨機性是以文件名計算的」,我認爲你不能做得比散列更好。 –

+0

任何幫助你可以在轉換這個去。 http://pastebin.com/1562U7w7 – JVK