web-dev-qa-db-ja.com

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

誰もがServer.MapPath(".")Server.MapPath("~")Server.MapPath(@"\")Server.MapPath("/")の違いを説明できますか?

434
Manu

Server.MapPath は、 を物理ディレクトリにマッピングするための相対パスまたは仮想パス を指定します。

  • Server.MapPath(".")1 実行中のファイルの現在の物理ディレクトリ(aspxなど)を返します。
  • Server.MapPath("..")は親ディレクトリを返します
  • Server.MapPath("~")はアプリケーションのルートへの物理パスを返します
  • Server.MapPath("/")は、ドメイン名のルートへの物理パスを返します(必ずしもアプリケーションのルートと同じではありません)。

例:

あなたがウェブサイトのアプリケーション(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("")この効果も生み出します
786
splattne

@ 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(".")が呼び出されます

24
dav_i

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