天天看點

.NET中三種擷取目前路徑的代碼,經常用到的Web變成,WinForm程式設計,Windows Mobile 程式設計

  1. //Web程式設計
  2. HttpContext.Current.Server.MapPath("FileName")
  3. System.Web.HttpContext.Current.Request.Path
  4. //Windows程式設計
  5. System.Environment.CurrentDirectory
  6. //Mobile程式設計
  7. Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 

<script type=text/javascript> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script>

A.指定 用戶端元素 資源的路徑

B.指定 伺服器控件 資源的路徑

C.确定目前網站的實體檔案路徑

============================

使用網站中的資源時,通常必須指定資源的路徑。

例如,您可以使用 URL 路徑引用頁面中的圖像檔案或網站中其他位置處的頁面的 URL。

同樣,Web 應用程式中的代碼可以使用基于伺服器的檔案的實體檔案路徑對檔案進行讀寫操作。

ASP.NET 提供用于引用資源并确定應用程式中的頁面或其他資源的路徑的方法。

A.指定 用戶端元素 資源的路徑

------------------------------

許多情況下,頁面中的元素或控件必須引用外部資源,如檔案。

ASP.NET 允許您通過各種方法引用外部資源。

所選方法取決于使用用戶端元素還是伺服器控件。

元素(不是頁面中的伺服器控件,而是用戶端元素)以原樣傳遞給浏覽器。

是以,從用戶端元素中引用資源時,應根據 HTML 中 URL 的标準規則構造路徑。

可以使用完全限定(絕對)URL 路徑,也可以使用各種類型的相對路徑。

例如,如果頁面包含一個 img 标記,則可以使用以下路徑之一設定其 src 屬性:

絕對 URL 路徑:

閱讀代碼編輯代碼運作效果複制HTML代碼儲存代碼<img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" /><img src="http://www.contoso.com/MyApplication/Images/SampleImage.jpg" />

如果引用其他位置(如外部網站)中的資源,則絕對 URL 路徑非常有用。

站點根目錄相對路徑,

根據站點(不是應用程式)根目錄進行解析。

此示例路徑假定 Images 檔案夾存在于網站根目錄下:

閱讀代碼編輯代碼運作效果複制HTML代碼儲存代碼<img src="/Images/SampleImage.jpg" /><img src="/Images/SampleImage.jpg" />

如果您的網站為 http://www.contoso.com,則路徑将解析為以下形式:

http://www.contoso.com/Images/SampleImage.jpg

如果将跨應用程式的資源(如圖像或用戶端腳本檔案)

保留在網站根目錄下的檔案夾中,則站點根目錄相對路徑非常有用。

根據目前頁面路徑解析的相對路徑:

閱讀代碼編輯代碼運作效果複制HTML代碼儲存代碼<img src="Images/SampleImage.jpg" /><img src="Images/SampleImage.jpg" />

解析為目前頁面路徑對等的相對路徑。

閱讀代碼編輯代碼運作效果複制HTML代碼儲存代碼<img src="../Images/SampleImage.jpg" /><img src="../Images/SampleImage.jpg" />

注意

預設情況下,浏覽器使用目前頁面的 URL 作為基準解析相對路徑。

但是,您可以在頁面中包含 HTML base 元素,以指定替代基路徑。

<script type=text/javascript> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script>

B.指定 伺服器控件 資源的路徑

-----------------------------

在引用資源的 ASP.NET 伺服器控件中,

可以使用絕對路徑或相對路徑,這一點與用戶端元素一樣。

如果使用相對路徑,則相對于頁面、使用者控件或包含該控件的主題的路徑進行解析。

例如,假設 Controls 檔案夾中包含一個使用者控件。

該使用者控件包含一個 Image Web 伺服器控件,

該伺服器控件的 ImageUrl 屬性設定為以下路徑:

Images/SampleImage.jpg

該使用者控件運作時,路徑将解析為以下形式:

/Controls/Images/SampleImage.jpg

無論承載使用者控件的頁面位置如何,都是如此。

伺服器控件中的絕對和相對路徑引用具有以下缺點:

絕對路徑在應用程式之間是不可移植的。

如果移動絕對路徑指向的應用程式,則連結将會中斷。

如果将資源或頁面移動到不同的檔案夾,

可能很難維護采用用戶端元素樣式的相對路徑。

為克服這些缺點,

ASP.NET 啟用了 Web 應用程式根目錄運算符 (~),

在伺服器控件中指定路徑時,可以使用該運算符。

ASP.NET 會将 ~ 運算符解析為目前應用程式的根目錄。

可以結合使用 ~ 運算符和檔案夾來指定基于目前根目錄的路徑。

下面的示例

示範使用 Image 伺服器控件時用于指定圖像的根目錄相對路徑的 ~ 運算符:

複制ASPX代碼儲存代碼<asp:image runat="server" id="Image1"

ImageUrl="~/Images/SampleImage.jpg" /><asp:image runat="server" id="Image1"

ImageUrl="~/Images/SampleImage.jpg" />

在該示例中,

圖像檔案将從 Web 應用程式根目錄下的 Images 檔案夾中直接讀取,

無論該頁面位于網站的什麼位置。

注意

~ 運算符隻能為伺服器控件識别,并且位于伺服器代碼中。

不能将 ~ 運算符用于用戶端元素。

可以在伺服器控件中的任何與路徑有關的屬性中使用 ~ 運算符。

注意

在主要頁中,資源的路徑基于内容頁的路徑進行解析。

C.确定目前網站的實體檔案路徑

----------------------------

在應用程式中,您可能需要确定伺服器上的檔案或其他資源的路徑。

例如,如果應用程式以程式設計方式對文本檔案進行讀寫操作,

則必須為用于讀取和寫入的方法提供該檔案的完整實體路徑。

将實體檔案路徑(如 C:/Website/MyApplication)

寫死到應用程式中并不是很好的做法,

因為如果移動或部署應用程式,則路徑會發生更改。

但是,

ASP.NET 為您提供了以程式設計方式擷取應用程式中的任何實體檔案路徑的方法。

然後,您可以使用基檔案路徑建立所需資源的完整路徑。

用于确定檔案路徑的兩種最常用的 ASP.NET 功能是

傳回路徑資訊的 HttpRequest 對象的屬性,以及 MapPath 方法。

注意

不應将實體檔案路徑發送到用戶端,

因為它們可能會被惡意使用者用來擷取有關您的應用程式的資訊。

根據請求屬性确定路徑

下表列出了 HttpRequest 對象的屬性,

這些屬性幫助您确定應用程式中的資源的路徑。

下面的示例假定使用以下 URL 來發出浏覽器請求:

http://www.contoso.com/MyApplication/MyPages/Default.aspx

對于這些示例,

術語“虛拟路徑”是指跟在伺服器辨別符後面的請求 URL 的一部分,

此時虛拟路徑如下所示:

/MyApplication/MyPages/Default.aspx

此外,這些示例假定網站根目錄的實體路徑為以下形式:

C:/inetpub/wwwroot/MyApplication/

最後,這些示例假定實體路徑包含一個名為 MyPages 的檔案夾。

則相關屬性及其傳回值如下:

ApplicationPath

擷取目前應用程式的根目錄路徑,

無論在該應用程式中的什麼位置請求該路徑。

對于此示例,該屬性将傳回以下内容:

/

CurrentExecutionFilePath

擷取目前請求的虛拟路徑。

不同于 FilePath,

差别在于如果請求已在伺服器代碼中被重定向,

則 CurrentExecutionFilePath 就是正确的。

對于此示例,該屬性将傳回以下内容:

/MyApplication/MyPages/Default.aspx

如果作為對 Transfer 或 Execute 進行調用的結果,

您擷取正在運作的代碼中的屬性,則路徑将反映該代碼的位置。

FilePath

擷取目前請求的虛拟路徑。

對于此示例,該屬性将傳回以下内容:

/MyApplication/MyPages/Default.aspx

不同于 CurrentExecutionFilePath,FilePath 不反映伺服器端轉換。

Path

擷取目前請求的虛拟路徑。對于此示例,該屬性将傳回以下内容:

/MyApplication/MyPages/default.aspx

PhysicalApplicationPath

擷取目前正在執行的應用程式的根目錄的實體檔案系統路徑。

對于此示例,該屬性将傳回以下内容:

C:/inetpub/wwwroot/

PhysicalPath

擷取與請求的 URL 對應的實體檔案系統路徑。

對于此示例,該屬性将傳回以下内容:

C:/inetpub/wwwroot/MyApplication/MyPages/default.aspx

使用 MapPath 方法

MapPath 方法傳回傳遞給該方法的虛拟路徑的完整實體路徑。

例如,以下代碼傳回網站根目錄的檔案路徑:

Visual Basic :

複制VB.NET代碼儲存代碼Dim rootPath As String = Server.MapPath("~")

C# :

複制C#代碼儲存代碼String rootPath = Server.MapPath("~");

注意

傳遞給 MapPath 方法的路徑必須為應用程式相對路徑,而不是絕對路徑。