23

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

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

4

3 に答える 3

57

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

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

さらに、Path.Combine文字列を連結するのではなく、パスを結合するために使用することをお勧めします。Path.Combineダブルパスセパレーターのある状況に陥らないようにします。

編集

「絶対」パスと「相対」パスを定義し、それらを「物理」パスと「仮想」パスと比較する方法を教えてください。

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

于 2011-09-29T16:03:58.857 に答える
7

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

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

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

于 2011-09-29T16:09:19.597 に答える
0

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

于 2011-09-29T16:04:08.197 に答える