Server.MapPath(“。”)、Server.MapPath(“〜”)、Server.MapPath(@“ \”)、Server.MapPath(“ /”)。違いはなんですか?


回答:


809

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\products
  • Server.MapPath("..") 戻り値 D:\WebApps\shop
  • Server.MapPath("~") 戻り値 D:\WebApps\shop
  • Server.MapPath("/") 戻り値 C:\Inetpub\wwwroot
  • Server.MapPath("/shop") 戻り値 D:\WebApps\shop

Pathがフォワードスラッシュ(/)またはバックスラッシュ(\)で始まる場合、MapPath()は、Pathが完全な仮想パスであるかのようにパスを返します。

Pathがスラッシュで始まらない場合、MapPath()は、処理されているリクエストのディレクトリに対する相対パスを返します。

注:C#では@、逐語的リテラル文字列演算子です。これは、文字列を「そのまま」使用し、エスケープシーケンスでは処理しないことを意味します。

脚注

  1. Server.MapPath(null)そして、Server.MapPath("")なりますあまりにもこの効果を生み出します

44
優秀な。私たちは、Server.Bloody.MapPathと戦い続けてきました。ありがとう
gbn

26
HostingEnvironment.MapPath必要としないため、使用した方がよいでしょうHttpContextstackoverflow.com/q/944219/3205
skolima '25 / 07/25

25

@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(".")


4

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.