C#(ASP.Net)擷取當前路徑的方法集合

來源:互聯網
上載者:User

//擷取當前進程的完整路徑,包含檔案名稱(進程名)。
string str = this.GetType().Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe檔案所在的目錄+.exe檔案名稱)
//擷取新的 Process 組件並將其與當前活動的進程關聯的主模組的完整路徑,包含檔案名稱(進程名)。
string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe檔案所在的目錄+.exe檔案名稱)

//擷取和設定目前的目錄(即該進程從中啟動的目錄)的完全限定路徑。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe檔案所在的目錄)
//擷取當前 Thread 的當前應用程式定義域的基目錄,它由程式集衝突解決程式用來探測程式集。
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe檔案所在的目錄+"\")
//擷取和設定包含該應用程式的目錄的名稱。
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe檔案所在的目錄+"\")
//擷取啟動了應用程式的可執行檔的路徑,不包括可執行檔的名稱。
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe檔案所在的目錄)
//擷取啟動了應用程式的可執行檔的路徑,包括可執行檔的名稱。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe檔案所在的目錄+.exe檔案名稱)
//擷取應用程式的當前工作目錄(不可靠)。
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe檔案所在的目錄)
========================================================
.NET中三種擷取當前路徑的代碼
//Web編程
HttpContext.Current.Server.MapPath("FileName")
System.Web.HttpContext.Current.Request.Path
//Windows編程
System.Environment.CurrentDirectory
//Mobile編程
Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
A.指定 用戶端元素 資源的路徑
B.指定 伺服器控制項 資源的路徑
C.確定當前網站的物理檔案路徑
============================
使用網站中的資源時,通常必須指定資源的路徑。
例如,您可以使用 URL 路徑引用頁面中的影像檔或網站中其他位置處的頁面的 URL。
同樣,Web 應用程式中的代碼可以使用基於伺服器的檔案的物理檔案路徑對檔案進行讀寫操作。
ASP.NET 提供用於引用資源並確定應用程式中的頁面或其他資源的路徑的方法。
A.指定 用戶端元素 資源的路徑
------------------------------
許多情況下,頁面中的元素或控制項必須引用外部資源,如檔案。
ASP.NET 允許您通過各種方法引用外部資源。
所選方法取決於使用用戶端元素還是伺服器控制項。
元素(不是頁面中的伺服器控制項,而是用戶端元素)以原樣傳遞給瀏覽器。
因此,從用戶端元素中引用資源時,應根據 HTML 中 URL 的標準規則構造路徑。
可以使用完全限定(絕對)URL 路徑,也可以使用各種類型的相對路徑。
例如,如果頁麵包含一個 img 標記,則可以使用以下路徑之一設定其 src 屬性:
絕對 URL 路徑:
閱讀代碼編輯代碼運行效果複製HTML代碼儲存代碼
如果引用其他位置(如外部網站)中的資源,則絕對 URL 路徑非常有用。
網站根目錄相對路徑,
根據網站(不是應用程式)根目錄進行解析。
此樣本路徑假定 Images 檔案夾存在於網站根目錄下:
閱讀代碼編輯代碼運行效果複製HTML代碼儲存代碼
如果您的網站為 http://www.xxx.com,則路徑將解析為以下形式:
http://www.xxx.com/Images/SampleImage.jpg
如果將跨應用程式的資源(像或用戶端指令碼檔案)
保留在網站根目錄下的檔案夾中,則網站根目錄相對路徑非常有用。
根據當前頁面路徑解析的相對路徑:
閱讀代碼編輯代碼運行效果複製HTML代碼儲存代碼
解析為當前頁面路徑對等的相對路徑。
閱讀代碼編輯代碼運行效果複製HTML代碼儲存代碼
注意
預設情況下,瀏覽器使用當前頁面的 URL 作為基準解析相對路徑。
但是,您可以在頁面中包含 HTML base 元素,以指定替代基路徑。
B.指定 伺服器控制項 資源的路徑
-----------------------------
在引用資源的 ASP.NET 伺服器控制項中,
可以使用絕對路徑或相對路徑,這一點與用戶端元素一樣。
如果使用相對路徑,則相對於頁面、使用者控制項或包含該控制項的主題的路徑進行解析。
例如,假設 Controls 檔案夾中包含一個使用者控制項。
該使用者控制項包含一個 Image Web 伺服器控制項,
該伺服器控制項的 ImageUrl 屬性設定為以下路徑:
Images/SampleImage.jpg
該使用者控制項運行時,路徑將解析為以下形式:
/Controls/Images/SampleImage.jpg
無論承載使用者控制項的頁面位置如何,都是如此。
伺服器控制項中的絕對和相對路徑引用具有以下缺點:
絕對路徑在應用程式之間是不可移植的。
如果移動絕對路徑指向的應用程式,則連結將會中斷。
如果將資源或頁面移動到不同的檔案夾,
可能很難維護採用用戶端元素樣式的相對路徑。
為克服這些缺點,
ASP.NET 啟用了 Web 應用程式根目錄運算子 (~),
在伺服器控制項中指定路徑時,可以使用該運算子。
ASP.NET 會將 ~ 運算子解析為當前應用程式的根目錄。
可以結合使用 ~ 運算子和檔案夾來指定基於當前根目錄的路徑。
下面的樣本
示範使用 Image 伺服器控制項時用於指定映像的根目錄相對路徑的 ~ 運算子:
複製ASPX代碼儲存代碼
ImageUrl="~/Images/SampleImage.jpg" />
ImageUrl="~/Images/SampleImage.jpg" />
在該樣本中,
影像檔將從 Web 應用程式根目錄下的 Images 檔案夾中直接讀取,
無論該頁面位於網站的什麼位置。
注意
~ 運算子只能為伺服器控制項識別,並且位於伺服器代碼中。
不能將 ~ 運算子用於用戶端元素。
可以在伺服器控制項中的任何與路徑有關的屬性中使用 ~ 運算子。
注意
在主控頁中,資源的路徑基於內容頁的路徑進行解析。
C.確定當前網站的物理檔案路徑
----------------------------
在應用程式中,您可能需要確定伺服器上的檔案或其他資源的路徑。
例如,如果應用程式以編程方式對文字檔進行讀寫操作,
則必須為用於讀取和寫入的方法提供該檔案的完整實體路徑。
將物理檔案路徑(如 C:\Website\MyApplication)
寫入程式碼到應用程式中並不是很好的做法,
因為如果移動或部署應用程式,則路徑會發生更改。
但是,
ASP.NET 為您提供了以編程方式擷取應用程式中的任何物理檔案路徑的方法。
然後,您可以使用基檔案路徑建立所需資源的完整路徑。
用於確定檔案路徑的兩種最常用的 ASP.NET 功能是
返迴路徑資訊的 HttpRequest 對象的屬性,以及 MapPath 方法。
注意
不應將物理檔案路徑發送到用戶端,
因為它們可能會被惡意使用者用來擷取有關您的應用程式的資訊。
根據請求屬性確定路徑
下表列出了 HttpRequest 對象的屬性,
這些屬性協助您確定應用程式中的資源的路徑。
下面的樣本假定使用以下 URL 來發出瀏覽器請求:
http://www.xxx.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 方法的路徑必須為應用程式相對路徑,而不是絕對路徑。

聯繫我們

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