Ответ 1
Предполагая, что пути являются относительными, отдельный процесс не знает, к чему они относятся, какое веб-приложение. В этом случае вам нужно будет сохранить его в конфиге и либо добавить два вместе, либо выполнить замену строки на ~/
У меня есть код, который отлично работает, когда мне нужно удалить некоторые файлы изображений из каталога на моем веб-сервере:
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.
Есть ли способ получить полный путь для этого случая?
Предполагая, что пути являются относительными, отдельный процесс не знает, к чему они относятся, какое веб-приложение. В этом случае вам нужно будет сохранить его в конфиге и либо добавить два вместе, либо выполнить замену строки на ~/
HttpContext.Current
недоступен, если ваш код работает внутри потока.
Чтобы иметь свой путь к веб-приложению, вы можете использовать:
System.Web.Hosting.HostingEnvironment.MapPath("~/")
или вы можете просто найти его в свойстве HttpRuntime.AppDomainAppPath
(рекомендуется/быстрее).