web-dev-qa-db-ja.com

.NET Webアプリケーションで現在のディレクトリを取得する

だから私はWebプロジェクトを持っています、そして私はC#メソッドDirectory.GetCurrentDirectory()を使用してWebサイトのルートディレクトリを取得しようとしています。将来的にファイルの場所が変わるため、静的なパスを使用したくありません。このメソッドは、imageProcess.aspx.csファイルで実行されていますが、返されると思った場所:

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs

私は代わりに得ています:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\

誰がこれが起こっているのか、そして可能な解決策は何かを説明できますか?どうもありがとう。

97
Julian Coltea

現在のディレクトリはシステムレベルの機能です。サーバーが起動されたディレクトリを返します。ウェブサイトとは関係ありません。

HttpRuntime.AppDomainAppPathが必要です。

HTTPリクエストの場合は、Server.MapPath("~/Whatever")を呼び出すこともできます。

195
SLaks

このコードを使用してください:

 HttpContext.Current.Server.MapPath("~")

詳細リファレンス:

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

  • Server.MapPath(".")は、実行中のファイル(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(".") returns D:\WebApps\shop\products
Server.MapPath("..") returns D:\WebApps\shop
Server.MapPath("~") returns D:\WebApps\shop
Server.MapPath("/") returns C:\Inetpub\wwwroot
Server.MapPath("/shop") returns D:\WebApps\shop

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

Pathがスラッシュで始まっていない場合、MapPathメソッドは、処理中のリクエストのディレクトリに相対的なパスを返します。

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

脚注

Server.MapPath(null)Server.MapPath("")もこの効果をもたらします。

96