從根本上避免上傳檔案重名【asp.net】

來源:互聯網
上載者:User

        最近在做一個網站定時產生頁面的功能,其中出現了一個問題是產生頁檔案名稱重名的問題。剛開始,我通過時間來命名,就是說什麼時間產生,它的名字就是那一刻的時間,而且精確到了毫秒級,通常這樣做已經足夠了,不會出現差錯,但是很不幸,我發現頁面產生的效率要遠比我想象的要高,我測試了一下,20個頁面竟然可以在一毫秒內產生,這樣就導致了後來的頁面覆蓋掉前面的,最後只剩下最後一個頁面而已了。

        有一種解決辦法就是判斷重名,如果檔案名稱已經存在,那麼就換一個名字,但是,這樣每次都要判斷。更要緊的是,隨著時間的推移,現有的頁面必然越來越多,每次產生都要遍曆一下目錄,豈不是很麻煩?雖然可能有比較好的搜尋演算法來提高效率,但是我想還不如從根本上解決這個問題更好。

        這樣就是產生了使用GUID的想法,GUID的全拼是globally unique identifier,即全球唯一識別碼。GUID是微軟使用的一個術語,通過特定的演算法,給某一個實體建立一個唯一的標識,此標識符可以保證全球唯一。

          一個 GUID 共128位長(16位元組),形如 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。其中每個 x 是 0-9 或 a-f 範圍內的一個十六進位的數字,前4個位元組為隨機數;5-8位元組為時間戳記,記錄了該GUID的產生時間(低16位字在前,以分鐘為單位),保證了時間上的唯一;9-10位元組與機器重啟次數有關;最後6位元組一般為該機器的網卡地址(如果這台機器沒有網卡,則使用另一常數),從而保證了空間上的唯一。因此幾乎不可能產生兩個相同的GUID,從而保證了名字的唯一性。

        GUID 在 .NET 中的使用很廣泛,同時.NET Framework 提供了專門 Guid 類,使用者可以很容易的產生GUID。比如在asp.net中就可以想這樣產生一個GUID:System.GUID.NewGUID()。基於這樣的原理,我就可以使用這個類為我產生的檔案命名了,從根本上解決了重名的問題。不僅如此,這個方法還可以應用到上傳檔案的命名上。        

        進一步瞭解,發現GUID使用很廣泛,其實我們平時也經常看到。如註冊表、類及介面標識、資料庫、以及自動產生的機器名、目錄名等。你可以開啟你的系統硬碟下\WINDOWS\Installer目錄,可以看到很多類似{0EFDF2F9-836D-4EB7-A32D-038BD3F1FB2A}的檔案夾,這就是系統自動產生的目錄名。註冊表中也可以發現這樣的數字串,以前也不知道是什麼,現在明白了,都是系統為了避免重名產生的GUID。

更多詳細參考:http://blog.mm-share.cn/post/139.html

貓貓的園地

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.