だから私は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\
誰がこれが起こっているのか、そして可能な解決策は何かを説明できますか?どうもありがとう。
現在のディレクトリはシステムレベルの機能です。サーバーが起動されたディレクトリを返します。ウェブサイトとは関係ありません。
HttpRuntime.AppDomainAppPath
が必要です。
HTTPリクエストの場合は、Server.MapPath("~/Whatever")
を呼び出すこともできます。
このコードを使用してください:
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("")
もこの効果をもたらします。