我想在我的網站上創建隨機文件夾名稱來存儲圖像及其縮略圖,但不是使用完整版本的生成的GUID,而是考慮使用只是其中的一部分,也許只是前8個字符,可能還有base64編碼。儘管我擔心可能發生碰撞。如何在.NET中創建12個字符的隨機文件夾名稱
有人能指出我的方向是否正確嗎?有沒有其他的解決方案,可以使用,如果我想保持一定數量的字符下的名稱?
更新:我想從path.GetRandomFileName望而卻步,因爲它使用的原始GUID,它不是12個字符長...
我想在我的網站上創建隨機文件夾名稱來存儲圖像及其縮略圖,但不是使用完整版本的生成的GUID,而是考慮使用只是其中的一部分,也許只是前8個字符,可能還有base64編碼。儘管我擔心可能發生碰撞。如何在.NET中創建12個字符的隨機文件夾名稱
有人能指出我的方向是否正確嗎?有沒有其他的解決方案,可以使用,如果我想保持一定數量的字符下的名稱?
更新:我想從path.GetRandomFileName望而卻步,因爲它使用的原始GUID,它不是12個字符長...
爲什麼不只是使用這樣的東西,並循環,直到你可以創建沒有衝突的文件?
const string ValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static string GenerateName(Random random, int length)
{
char[] chars = new char[length];
for (int i=0; i < length; i++)
{
chars[i] = ValidChars[random.Next(ValidChars.Length)];
}
return new string(chars);
}
原因傳入RNG是爲了避免在不使用靜態RNG(這不是線程)(快速連續調用時重複)的方法創建一個新的RNG的典型問題。
另一種方法是擁有一個靜態只讀RNG,並通過鎖定在GenerateName
內序列化調用。
重點是你生成一個隨機名稱,你只是不斷嘗試創建具有隨機名稱的文件,直到你成功,這很可能發生得非常快(12個字符[AZ 0-9]給出4,738,381,338,321,616,896種可能的組合)。
您可以使用Path類System.IO來,除其他外,生成隨機文件和文件夾名稱。
System.IO.Path.GetRandomFileName()
如果您使用的是數據庫爲您的網站,那麼你可以使用自動遞增的數字或序列來生成圖像唯一的文件名。
使用Oracle會創建一個序列如下;
CREATE SEQUENCE SEQUENCE_NAME MINVALUE值 MAXVALUE值 WITH值 INCREMENT BY值 CACHE START值;
要獲得序列中的下一個值,請使用序列的nextval。例如
CREATE SEQUENCE seq_user_id;
SELECT seq_user_id.NEXTVAL FROM dual;
INSERT INTO test_bed(user_id,class_type,room_location) VALUES(seq_user_id.NEXTVAL,'Underwater Basketweaving','RM1205');
你將如何生成該序列? – ak3nat0n 2009-05-01 17:36:20
函數使用guid創建文件夾名稱,這正是我想要避免的。我怎樣才能得到一個名稱爲「dGhlIG1pbmQs」的文件夾? – ak3nat0n 2009-05-01 17:28:03
不,它返回一個8.3名稱。 8個字符,句點,3個字符,全部是字母數字。 – bsneeze 2009-05-01 21:47:36