C# 路徑問題
~/ 、./ 、../ 、 / 、http://www.cnblogs.com/ 問題
比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx )
1.Request.ApplicationPath 就是/Webapplication1
如果是站點就直接返回”/”;
~/ 可以用在需要設定路徑的控制元件比如:imagebutton,image等 以及連結ascx檔案,配置檔案.
../ 的好處是可以不知道資料夾的名字知道層次結構就可以了
/ 的好處是針對根路徑,如果本地目錄和伺服器目錄一致,那直接用/就可以保證路徑正確,這種情況很少.
Request.ApplicationPath 注意如果沒有虛擬目錄就直接返回/,那你程式裡面就不要設定/
比如
Request.ApplicationPath+”/images/a.gif” 如果是站點 就是等於 “//images/a.gif”,錯誤的
如果有虛擬目錄就是 “Webapplication1/images/a.gif”
沒有/的
Request.ApplicationPath 發揮虛擬目錄名稱,如果是站點就返回/
~/ 類似,不過只用服務端的空間可以識別;
/ 針對目錄
./ 當前目錄
../ 相對當前目錄的上層目錄
比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx )
Request.ApplicationPath 就是Webapplication1/
~/ 也是 Webapplication1/
/就是http://localhost/
ASP.NET 網站路徑
使用網站中的資源時,通常必須指定資源的路徑。例如,您可以使用 URL 路徑引用頁面中的影象檔案或網站中其他位置處的頁面的 URL。同樣,Web 應用程式中的程式碼可以使用基於伺服器的檔案的物理檔案路徑對檔案進行讀寫操作。ASP.NET 提供用於引用資源並確定應用程式中的頁面或其他資源的路徑的方法。
指定資源的路徑
許多情況下,頁面中的元素或控制元件必須引用外部資源,如檔案。ASP.NET 支援引用外部資源的各種方法。根據您使用的是客戶端元素還是 Web 伺服器控制元件,選擇的引用方法將有所不同。
客戶端元素
客戶端元素是頁面上的非 Web 伺服器控制元件元素,它們將按原樣被傳遞給瀏覽器。因此,從客戶端元素中引用資源時,應根據 HTML 中 URL 的標準規則構造路徑。可以使用完全限定的 URL 路徑(又稱為絕對 URL 路徑),也可以使用各種型別的相對路徑。例如,如果頁面包含 img 元素,則可以使用以下路徑之一設定其 src 屬性:
絕對 URL 路徑。如果引用其他位置(例如外部網站)中的資源,則絕對 URL 路徑非常有用。
網站根目錄相對路徑,此路徑將根據網站根目錄(而非應用程式根目錄)進行解析。如果將跨應用程式的資源(例如影象或客戶端指令碼檔案)保留在網站根目錄下的資料夾中,則網站根目錄相對路徑非常有用。
此示例路徑假定 Images 資料夾位於網站根目錄下。
[圖片上傳失敗...(image-b648c9-1555857354339)]
如果您的網站為http://www.contoso.com ,則此路徑將解析為以下形式。
http://www.contoso.com/Images/SampleImage.jpg 下面是一個根據當前頁面路徑解析的相對路徑。
解析為當前頁面路徑對等的相對路徑。
注意
預設情況下,瀏覽器使用當前頁面的 URL 作為解析相對路徑的基準。但是,您可以在頁面中包含 HTML base 元素,以指定替代基路徑。
伺服器控制元件
在引用資源的 ASP.NET 伺服器控制元件中,可以使用絕對路徑或相對路徑,這一點與客戶端元素一樣。如果使用相對路徑,則相對於頁面、使用者控制元件或包含該控制元件的主題的路徑進行解析。例如,假設 Controls 資料夾中包含一個使用者控制元件。該使用者控制元件包含一個 Image Web 伺服器控制元件,此伺服器控制元件的 ImageUrl 屬性被設定為以下路徑:Images/SampleImage.jpg。
當該使用者控制元件執行時,上述路徑將解析為以下形式:/Controls/Images/SampleImage.jpg。無論承載該使用者控制元件的頁面位於何處,結果都是如此。
注意
在主控頁中,資源的路徑基於內容頁的路徑進行解析。有關更多資訊,請參見 ASP.NET 母版頁概述。
伺服器控制元件中的絕對和相對路徑引用具有以下缺點:
絕對路徑在應用程式之間是不可移植的。如果移動絕對路徑指向的應用程式,則連結將會中斷。
如果將資源或頁面移動到不同的資料夾,可能很難維護採用客戶端元素樣式的相對路徑。
為克服這些缺點,ASP.NET 包括了 Web 應用程式根目錄運算子 (~),當您在伺服器控制元件中指定路徑時可以使用該運算子。ASP.NET 會將 ~ 運算子解析為當前應用程式的根目錄。可以結合使用 ~ 運算子和資料夾來指定基於當前根目錄的路徑。
下面的示例演示了使用 Image 伺服器控制元件時用於為影象指定根目錄相對路徑的 ~ 運算子。在此示例中,無論頁面位於網站中的什麼位置,都將從位於 Web 應用程式根目錄下的 Images 資料夾中直接讀取影象檔案。
二、C#獲取當前路徑的方法:
- System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
- System.Environment.CurrentDirectory
-獲取和設定當前目錄(該程序從中啟動的目錄)的完全限定目錄。
- System.IO.Directory.GetCurrentDirectory()
-獲取應用程式的當前工作目錄。這個不一定是程式從中啟動的目錄啊,有可能程式放在C:\www裡,這個函式有可能返回C:\Documents and Settings\ZYB,或者C:\Program Files\Adobe\。
- System.AppDomain.CurrentDomain.BaseDirectory
-獲取程式的基目錄。
- System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
-獲取和設定包括該應用程式的目錄的名稱。
- System.Windows.Forms.Application.StartupPath
-獲取啟動了應用程式的可執行檔案的路徑。
- System.Windows.Forms.Application.ExecutablePath
-獲取啟動了應用程式的可執行檔案的路徑及檔名。
二、操作環境變數
利用System.Environment.GetEnvironmentVariable()方法可以很方便地取得系統環境變數,如:
System.Environment.GetEnvironmentVariable("windir")就可以取得windows系統目錄的路徑。
以下是一些常用的環境變數取值:
System.Environment.GetEnvironmentVariable("windir")=C:\WINDOWS
System.Environment.GetEnvironmentVariable("INCLUDE")=C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\include
System.Environment.GetEnvironmentVariable("TMP")=C:\DOCUME1\zhoufoxcn\LOCALS 1\Temp
System.Environment.GetEnvironmentVariable("TEMP")=C:\DOCUME1\zhoufoxcn\LOCALS 1\Temp
System.Environment.GetEnvironmentVariable("Path")=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\jdk1.5.0\bin;C:\MySQLServer5.0\bin;C:\Program Files\Symantec\pcAnywhere;C:\Program Files\Microsoft SQL Server\80\Tools\BINN
三、關於""
1 asp.net webform
A:Request.PhysicalApplicationPath獲取站點所在虛擬目錄的物理路徑,最後包含“\”;
2.c# winform
A:“Application.StartupPath”:獲取當前應用程式所在目錄的路徑,最後不包含“\”;
B:“Application.ExecutablePath ”:獲取當前應用程式檔案的路徑,包含檔案的名稱;如:export.exe
C:“AppDomain.CurrentDomain.BaseDirectory”:獲取當前應用程式所在目錄的路徑,最後包含“\”;
D:“System.Threading.Thread.GetDomain().BaseDirectory”:獲取當前應用程式所在目錄的路徑,最後包含“\”;
E:“Environment.CurrentDirectory”:獲取當前應用程式的路徑,最後不包含“\”;
F:“System.IO.Directory.GetCurrentDirectory”:獲取當前應用程式的路徑,最後不包含“\”;
四、程式解除安裝獲取系統安裝目錄
System.Reflection.Assembly curPath = System.Reflection.Assembly.GetExecutingAssembly();
string path=curPath.Location;//得到安裝程式類SetupLibrary檔案的路徑,獲取這個檔案路徑所在的目錄即得到安裝程式的目錄;
五、asp.net 獲取路徑
1.Request.ApplicationPath->當前應用的目錄
Jsp中, ApplicationPath指的是當前的application(應用程式)的目錄,ASP.NET中也是這個意思。
對應的--例如我的伺服器上有兩個web應用域名都是mockte.com 一個對映到目錄mockte.com/1/ 另一個影射到http://mockte.com/2/
那麼mockte.com/1/就是第一個應用的ApplicationPath 同理 mockte.com/2/就是第二個應用的ApplicationPath
2.Request.FilePath->對應於iis的虛擬目錄
如 URLhttp://mockte.com/1/index.html/pathinfo
FilePath = /1/index.html
3.Request.Path->當前請求的虛擬路徑
Path 是 FilePath 和 PathInfo 尾部的串聯。例如 URLhttp://mockte.com/1/index.html/pathinfo
那麼Path = /1/index.html/pathinfo
4.Request.MapPath(string url)->將url對映為iis上的虛擬目錄
這個目錄都是相對於application的根目錄的
於Server.MapPath相比,不會包含類似c:/這樣的路徑
可以理解為是相對路徑(對比的Server.MapPath就是絕對路徑)
5.Server.MapPath(string url)->將url對映為伺服器上的物理路徑
例如http://mockte.com/1/index.html 假設你的應用程式在c:/iis/MySite中
那麼就是 c:/iis/MySite/1/index.html
路徑轉換程式碼:
//本地路徑轉換成URL相對路徑
private string urlconvertor(string imagesurl1)
{
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//獲取程式根目錄
string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //轉換成相對路徑
imagesurl2 = imagesurl2.Replace(@"/", @"/");
//imagesurl2 = imagesurl2.Replace(@"Aspx_Uc/", @"");
return imagesurl2;
}
//相對路徑轉換成伺服器本地物理路徑
private string urlconvertorlocal(string imagesurl1)
{
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//獲取程式根目錄
string imagesurl2 = tmpRootDir + imagesurl1.Replace(@"/", @"/"); //轉換成絕對路徑
return imagesurl2;
}
1.使用filePath="/Logs/abc.txt",被認為是根目錄,即網頁檔案所在的碟符,預設的是C盤,則在這裡這個路徑被解釋為"C:/Logs/abc.txt"
2.使用filePath="~/Logs/abc.txt",被認為是伺服器的目錄
3.使用filePath="./Logs/abc.txt",仍然是伺服器目錄下