2012-11-08 17 views
6

デバッグしようとしている.NETアプリケーションがあり、アプリケーションの一部がプロジェクトからファイルを読み込みます。このファイルは私のコードでIIS Expressを使用してデバッグ中にファイルへのフルパスを取得

C:\Users\USER_FOLDER\Documents\Visual Studio 2012\Projects\MY_PROJECT\_templates\myFile.html 

に位置しており、私は、ファイルへの相対パスを指定して、自分のファイルへの完全なディレクトリパスを取得するにはDirectoryInfoクラスを使用します。

string myFile = (new DirectoryInfo("_templates/myFile.html")).FullName; 

しかし、このリターン次のパス(余分な\ 'sのエスケープ文字として):

"C:\\Program Files\\IIS Express\\_templates\\myFile.html" 

私が記載されている最初のパス、第三はないと一致しますIIS Expressでデバッグするときに返されるパスを期待していました。どうしてこれなの?パスを適切に引き出すために私のプロジェクトに設定する必要のあるものがありますか?私はIIS7サイトに自分のコードを配備してもこれが起こらないと思っていますが、まだそのテストレベルには達していません。

+0

そのは、プログラムファイル\\ IIS Expressは\\ 'それはあなたがとてもについて具体的にそのディレクトリのパスからそれを起動する意味'返す場合ディレクトリパス'' _templates/myFile.html ''が親ディレクトリ内のローカルディレクトリであり、あまり具体的ではないと考えてください。 –

+0

その際、Server.MapPathを呼び出すと、よりわかりやすくなくても正しいパスが返されました。私は他の言語と同様に、ファイルを参照していたスクリプトの場所を基準にしていたが、その内容を読むためには、そのパスを扱っていたからだ。 NETサーバーはパスへの完全修飾URIを必要とし、私はそれを導出するために間違ったオブジェクトを使用していました。なぜ私の_valid_質問が投票されたのか困惑しています。 –

答えて

5

使用Server.MapPath

Server.MapPath("~/_templates/myFile.html") 

またはHttpServerUtility.MapPath

HttpServerUtility.MapPath("~/_templates/myFile.html") 
+0

ありがとう! Server.MapPathは私にとってはうまくいったが、HttpServerUtility.MapPathを動作させることができなかった。 HttpServerUtilityのために、 '非静的なフィールド、メソッド、またはプロパティ 'System.Web.HttpServerUtility.MapPath(string)'にオブジェクト参照が必要であると不平を言っていました。'それを書くさまざまな方法を試みましたが、 Server.MapPathを使うだけです。再度、感謝します。 –

+0

これがまったく同じ状況であるかどうかはわかりませんが、同じオブジェクト参照の問題がありました。私はHttpContextを使ってそれを解決しました。 - HttpContext.Current.Server.MapPath();のように。 –