120

だから私はウェブプロジェクトを持っていて、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\

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

4

3 に答える 3

229

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

あなたが欲しいHttpRuntime.AppDomainAppPath

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

于 2012-06-08T15:19:31.840 に答える
121

このコードを使用します:

 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

パスが円記号(/)または円記号()で始まる場合、このMapPathメソッドは、パスが完全な仮想パスであるかのようにパスを返します。

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

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

脚注

Server.MapPath(null)そしてServer.MapPath("")、この効果も生み出します。

于 2014-12-16T08:51:43.233 に答える
0

ドットネット6の場合、私は以下を使用します。

AppContext.BaseDirectory

それについてのクールなことは、それがasp.netでもコンソールアプリケーションでも同じになるということです。

于 2022-01-12T17:21:36.803 に答える