Server.MapPath和Request.PhysicalApplicationPath的異同

來源:互聯網
上載者:User

標籤:

很多人對它們都不陌生,在眾多的WEB程式中,使用Server.MapPath和Request.PhysicalApplicationPath來操作目錄/檔案的幾率參半,我曾經也經常混用,然而時間久了。發現Request.PhysicalApplicationPath有點“麻煩”?
其實在一般的應用程式中,感覺不到兩者的區別,而在一些存在“虛擬目錄”、存在多級子目錄、需要虛擬目錄相互檔案操作的網站中,就可以知道它們的區別了。我的總結如下:
1、相對當前路徑的檔案操作:
可以使用Server.MapPath("test.txt")、Server.MapPath("a/test.txt")、Server.MapPath("../b/test.txt"),這個時候使用Request.PhysicalApplicationPath就很難定位到檔案;
2、絕對路徑的檔案操作:
這個時候兩者都可以,有點注意的是Server.MapPath中的絕對是“面向”網站而言的,不會因為“虛擬目錄”本身的屬性不同而變化,Request.PhysicalApplicationPath就並非如此。
打個比方:主要站台指向D:\wwwroot\,虛擬目錄指向E:\wwwroot\a\,取名為a。
那麼如果我要操作虛擬目錄下的E:\wwwroot\a\test.txt,可以使用Server.MapPath("/a/test.txt"),又或者直接使用Server.MapPath("~/test.txt");
那麼用Request.PhysicalApplicationPath該怎麼寫?
很多人數是:Request.PhysicalApplicationPath + "test.txt",我說不一定,為什嗎?
因為要是該虛擬目錄有單獨的應用池,Request.PhysicalApplicationPath就是E:\wwwroot\a\,後面加上test.txt就是E:\wwwroot\a\test.txt;
但要是該虛擬目錄沒有單獨的應用池,Request.PhysicalApplicationPath就是D:\wwwroot\,不管你後面怎麼加,都定位不到我要找到檔案了。呵呵……

3、跨虛擬目錄的檔案操作:
比如我現在要操作虛擬目錄b下的test2.txt檔案,使用Server.MapPath("/b/test2.txt")就沒有問題(前提是我有操作許可權,沒有許可權是另外一回事)。
而Request.PhysicalApplicationPath根本就無法找到其他的虛擬目錄下的檔案,不信誰試試,再告訴我方法?!!!
  

Server.MapPath和Request.PhysicalApplicationPath的異同

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.