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


105

だから私はウェブプロジェクトを持っていて、c#メソッドを使ってウェブサイトのルートディレクトリを取得しようとしていますDirectory.GetCurrentDirectory()。ファイルの場所は将来変更されるため、静的パスを使用したくありません。このメソッドは、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\

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


一般的な.Netアプリケーションの実行パスについて説明している関連記事。
RBT 2017年

回答:


210

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

あなたが欲しいHttpRuntime.AppDomainAppPath

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


2
ありがとう。私は実際にを探していましたHttpRuntime.BinDirectoryが、あなたの答えであなたが言ったことを試してみたら、デバッガでそれを判断するのは簡単でした。
Kent Weigel、2016年

`Server.MapPath("〜Whatever ")を使用し、IISサイトがmyserverでホストされている場合。myserver / Whateverフォルダーではなく、C:\\ somefolder \ Whateverを取得します。
Si8 2017年

@ Si8:はい。それが何をするかServer.MapPathです。stackoverflow.com/q/5823847/34397
SLaks

2
.NETアセンブリに慣れていない場合(またはイミディエイトウィンドウを使用している場合)の完全なコマンドはSystem.Web.HttpRuntime.AppDomainAppPathSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
次のとおりです。

2
@testpattern HttpContextis System.Web.HttpContext.Current.Server.MapPath("~")、not notHttpRuntime
chengzi

112

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

 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("")、あまりにもこの効果が得られます。



3
@GGO良いリンク!リンクをたどって、結局System.Web.Hosting.HostingEnvironment.MapPath("~")代わりにになりました。これは、依存関係なく、うまく機能しますSystem.Web.HttpContext.Current
Max Barraclough
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.