回答:
Server.MapPathは、物理ディレクトリにマップする相対パスまたは仮想パスを指定します。
Server.MapPath(".")1は、実行中のファイル(aspxなど)の現在の物理ディレクトリを返しますServer.MapPath("..") 親ディレクトリを返しますServer.MapPath("~") アプリケーションのルートへの物理パスを返しますServer.MapPath("/") ドメイン名のルートへの物理パスを返します(必ずしもアプリケーションのルートと同じである必要はありません)例:
Webサイトアプリケーション(http://www.example.com/)を
C:\Inetpub\wwwroot
ショップアプリケーション(アプリケーションとしてマークされたIISの仮想ディレクトリとしてのサブWeb)を
D:\WebApps\shop
たとえばServer.MapPath()、次のリクエストで呼び出す場合:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
次に:
Server.MapPath(".")1返品D:\WebApps\shop\productsServer.MapPath("..") 戻り値 D:\WebApps\shopServer.MapPath("~") 戻り値 D:\WebApps\shopServer.MapPath("/") 戻り値 C:\Inetpub\wwwrootServer.MapPath("/shop") 戻り値 D:\WebApps\shopPathがフォワードスラッシュ(/)またはバックスラッシュ(\)で始まる場合、MapPath()は、Pathが完全な仮想パスであるかのようにパスを返します。
Pathがスラッシュで始まらない場合、MapPath()は、処理されているリクエストのディレクトリに対する相対パスを返します。
注:C#では@、逐語的リテラル文字列演算子です。これは、文字列を「そのまま」使用し、エスケープシーケンスでは処理しないことを意味します。
脚注
Server.MapPath(null)そして、Server.MapPath("")なりますあまりにもこの効果を生み出します。@splattneの答えを少し拡張するだけです:
MapPath(string virtualPath) 次を呼び出します:
public string MapPath(string virtualPath)
{
return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}
MapPath(VirtualPath virtualPath)次にMapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)、以下を含む呼び出し:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
したがって、MapPath(null)またはを呼び出すとMapPath("")、実質的にMapPath(".")
1)Server.MapPath(".")- aspx実行中のファイル(など)の「現在の物理ディレクトリ」を返します。
例 と思います D:\WebApplications\Collage\Departments
2)Server.MapPath("..")-「親ディレクトリ」を返します
例 D:\WebApplications\Collage
3)Server.MapPath("~")-「アプリケーションのルートへの物理パス」を返します
例 D:\WebApplications\Collage
4)Server.MapPath("/")-ドメイン名のルートへの物理パスを返します
例 C:\Inetpub\wwwroot