標籤:postedfile.filename c#逸出字元
在利用Html中的File控制項上傳檔案時,如何獲得你上傳的檔案的路徑?北大青鳥的視頻中告訴我們用:
File1.PostedFile.FileName
可是在斷點調試中,我就發現了問題。
在Firefox瀏覽器和IETester中,都只顯示檔案名稱,而不顯示檔案的完整路徑,獲得的FileName也只是檔案名稱。比如我選擇的圖片的完整路徑是"E:\提高班課程實踐篇(我)\images\niunanlogo.jpg",但是瀏覽器中顯示的是“niunanlogo.jpg” ,而且調試中顯示的FileName也是“niunanlogo.jpg”,雖說這樣挺方便的,不用我們再像視頻中說的那樣,去專門截取這部分字串(因為視頻中顯示的是完整路徑,需要截取出檔案名稱。)但是,這是為什麼呢?如果我們哪天需要完整的檔案路徑怎麼辦?哈哈,這些問題,早就有人解決過了,這裡我就借鑒一下:
對於IE或IETester,我們找到:選項-Internet屬性-安全-自訂層級,:
將“檔案上傳到伺服器時包含本地目錄路徑”一項設成啟動,
這樣就能顯示出完整路徑了。
對於FireFox也有解決辦法,有興趣的可以自己查一查啊!
解決了上述問題,又產生了新的疑惑,這個時候斷點調試發現我的程式(VS2010 C#)中的FileName顯示為:
"E:\\提高班課程實踐篇(我)\\images\\niunanlogo.jpg"
而視頻中顯示的為:
@"E:\提高班課程實踐篇(我)\images\niunanlogo.jpg"
這又是怎麼回事兒哩?
我們先不著急解答上述問題,先跟我一起想象一下下面的情景:
如果你想在Label中顯示一句話,如下:
與"take"相關的英語短語很多
你在程式中怎麼實現呢?
如果在程式中你直接寫:
Label1.Text = "與"take"相關的英語短語很多";
這樣是不行的。
因為一般情況下:
""是用來表示它括起來的內容是字串的。
可是我們現在只想讓它表示一個雙引號怎麼辦?
這時候就需要逸出字元了,大家一定不陌生,一個“\”功能無比強大,它能“強迫”別的字元做出改變。
然後我們可以這樣寫:
Label1.Text = "與\"take\"相關的英語短語很多";
然後一點問題都沒有哦!
現在,假入我們想讓Label中顯示:
E:\提高班課程實踐篇(我)\images\niunanlogo.jpg
那麼我們怎麼寫呢?
如果我們在程式中寫成:
Label1.Text= "E:\提高班課程實踐篇(我)\images\niunanlogo.jpg";
會提示錯誤:“無法識別的逸出序列”
也就是說預設情況下,\ 表示逸出字元,但是我們想讓它僅表示一個反斜線,那麼我們就這樣寫:
Label1.Text= "E:\\提高班課程實踐篇(我)\\images\\niunanlogo.jpg";
之後,我們就找出規律,如果我們想改變某個字元的原本意義,就用逸出字元(\)+你要改變意義的字元就OK了。如果我們相用n表示換行,那麼就寫成\n。
大家也看到了,如果在一個路徑字串中,有多個\,那麼我就得額外多寫同樣個數的\,有沒有簡便的辦法呢?
當然有了,寫成如下形式:
Label1.Text = @"E:\提高班課程實踐篇(我)\images\niunanlogo.jpg";
我們知道在預設情況下,\是被看做逸出字元的,但是在前面加上@之後,它後面的字串中的\就會被都當做反斜線處理,不把它看做逸出字元了。
所以,現在我們來看看為什麼視頻中和我的VS2010顯示的不一樣呢?其實它們是一回事,只是是兩種寫法,目的都是讓\表示為反斜線。所以它們兩個是等價的。
總結:
這篇文章主要是通過我在實踐當中遇到的問題,講了講如何用Html的File控制項顯示完整檔案路徑以及逸出字元的基本知識,內容很簡單,但是解決問題的過程很精彩!
ASP.NET總結——上傳檔案