web-dev-qa-db-ja.com

HTTPContext.Currentが何もないときにServer.MapPathを使用する方法

Webサーバー上のディレクトリからいくつかの画像ファイルを削除する必要があるときに正常に機能するコードがいくつかあります。

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です。

この場合のフルパスを取得する方法はありますか?

17
John Adams

パスが相対的であると仮定すると、別のプロセスは、パスが相対的であるか、どのWebアプリケーションであるかを認識しません。この場合、それを構成に保存し、2つを一緒に追加するか、〜/で文字列置換を実行する必要があります。

1
Hawxby

HttpContext.Currentコードがスレッド内で実行されている場合は使用できません。

Webアプリケーションのパスを取得するには、次のいずれかを使用できます。

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

または、単にHttpRuntime.AppDomainAppPathプロパティ(推奨/高速)。

32
Chtiwi Malek