web-dev-qa-db-ja.com

MVC3でServer.MapPathを使用する

私はコードを持っています

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName

返す

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

ServiceControllerへのパスSERVICENAMEを取得するのはなぜですか?にあるApp_Dataへのパスが必要です

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

23
P.Brian.Mackey

仮想ルートから開始することを指定する必要があります。

string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName);

さらに、文字列を連結するのではなく、 Path.Combine を使用してパスを結合することをお勧めします。 Path.Combineを使用すると、ダブルパス区切り文字が含まれる状況に陥ることがなくなります。

[〜#〜] edit [〜#〜]

「絶対」および「相対」パスと、それらが「物理」および「仮想」パスと比較する方法を定義できますか?

MSDNには、相対パス、物理パス、および仮想パスに関する 適切な説明 があります。ご覧ください。

57
vcsjones

これまでに与えられた答えはあなたが探しているものですが、私はあなたの特定の場合、あなたが実際に必要なものはこれだと思います:

AppDomain.CurrentDomain.GetData("DataDirectory").ToString()

MVCまたはASP.NETの将来のバージョンでそのディレクトリ名が変更された場合、これは引き続きApp_Dataディレクトリへのファイルパスを返します。

7
Matt Hamsmith

このようにしてみてください(@"~/App_Data")~/はルートディレクトリを表します。