Получение текущего каталога in.NET веб-приложение


Итак, у меня есть веб-проект, и я пытаюсь получить корневой каталог веб-сайта с помощью метода c#Directory.GetCurrentDirectory(). Я не хочу использовать статический путь, так как расположение файлов будет меняться в будущем. Этот метод выполняется в моем imageProcess.aspx.cs файл, но где я думал, что он вернется:

C:Userstcbldocumentsvisual studio 2010ProjectsModelMonitoringModelMonitoringimageProcess.aspx.cs

вместо этого я получаю:

C:Program FilesCommon FilesMicrosoft SharedDevServer.0

кто-нибудь может объяснить, почему это происходит и какое решение может быть? Большое спасибо.

2 86

2 ответа:

текущий каталог является функцией системного уровня; он возвращает каталог, из которого был запущен сервер. Это не имеет никакого отношения к сайту.

вы хотите HttpRuntime.AppDomainAppPath.

Если вы находитесь в HTTP-запросе, вы также можете позвонить Server.MapPath("~/Whatever").

используйте этот код:

 HttpContext.Current.Server.MapPath("~")

Полная Ссылка:

Server.MapPath указывает относительный или виртуальный путь для сопоставления с физическим каталогом.

  • Server.MapPath(".") возвращает текущий физический каталог файл (например, aspx) выполняется
  • Server.MapPath("..") возвращает родительский каталог
  • Server.MapPath("~") возвращает физический путь к корню применение
  • Server.MapPath("/") возвращает физический путь к корневому из доменное имя (не обязательно совпадает с корнем применение)

пример:

допустим, вы указали приложение веб-сайта (http://www.example.com/) до

C:\Inetpub\wwwroot

и установил приложение магазина (sub web как виртуальный каталог в IIS, помеченный как приложение) в

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#, @ является дословным литеральным строковым оператором, означающим, что строка должна использоваться "как есть" , а не быть обработаны для escape-последовательности.

сноски

Server.MapPath(null) и Server.MapPath("") будет производить этот эффект.