2011-01-20 10 views
13

ないときServer.MapPathのを使用するにはどうすれば持って、私は私のウェブサーバ上のディレクトリからいくつかの画像ファイルを削除する必要がある場合に正常に動作しますいくつかのコード:私は..butのHttpContext .Currentは何も

Dim ImageURL As String = dsImages.Tables(0).Rows(iImgRow).Item("ImageURL") 
Dim physicalName = Server.MapPath(ImageURL) 
oUpload.DeleteFileFromServer(physicalName, iAdid, iImgID) 

問題に実行して設定された間隔で別個のスレッドで実行中の保守作業は、上記の必要性のようなファイルを削除すると判断した場合:この後者の場合には

Dim ImageURL As String = dsImage.Tables(0).Rows(i - 1).Item("ImageURL") 
Dim iImgID As Integer = dsImage.Tables(0).Rows(i - 1).Item("ImageId") 
Dim physicalName As String = HttpContext.Current.Server.MapPath(ImageURL) 
oUpload.DeleteFileFromServer(physicalName, iAdID, iImgID) 

HttpContext.Current.Server.MapPath(IMAGEURL)の値はNothingです。

このケースの完全なパスを取得する方法はありますか?

+0

[Global.asaxからServer.MapPath()を使用するにはどうすればよいですか?](http://stackoverflow.com/questions/935940/how-can-i-use-server-mappath-from-global) -asax) –

答えて

1

パスが相対的であると仮定すると、別のプロセスは、相対的なWebアプリケーションとは何かを認識しません。この場合、それをconfigに格納し、2つの文字を一緒に追加するか、〜/

+7

より良い答えを見つけました:http://stackoverflow.com/questions/935940/how-can-i-use-server-mappath-from-global-asax - しかし私は最良の方法を知らないこの質問を閉じる。 –

+0

ニースは、そこに新しい何かを学んだ。私はあなたが今死ぬことを諦めていると思う。 – Hawxby

16

HttpContext.Currentのコードをスレッド内で実行しているときは使用できません。

は、Webアプリケーションのパスを持つようにすることができますいずれかを使用:

System.Web.Hosting.HostingEnvironment.MapPath("~/") 

か、単にHttpRuntime.AppDomainAppPathプロパティでそれを見つけることができますが(速い/推奨します)。