Получение текущего каталога в веб-приложении .NET
Итак, у меня есть веб-проект, и я пытаюсь получить корневую директорию веб-сайта с помощью метода С# Directory.GetCurrentDirectory()
. Я не хочу использовать статический путь, поскольку расположение файлов будет меняться в будущем. Этот метод работает в моем файле 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\
Может ли кто-нибудь объяснить, почему это происходит и каково возможное решение? Большое спасибо.
Ответы
Ответ 1
Текущий каталог представляет собой системный уровень; он возвращает каталог, из которого был запущен сервер. Это не имеет никакого отношения к веб-сайту.
Вы хотите HttpRuntime.AppDomainAppPath
.
Если вы используете HTTP-запрос, вы также можете вызвать Server.MapPath("~/Whatever")
.
Ответ 2
Используйте этот код:
HttpContext.Current.Server.MapPath("~")
Подробное описание:
Server.MapPath
указывает относительный или виртуальный путь для отображения в физический каталог.
-
Server.MapPath(".")
возвращает текущий физический каталог
файл (например, aspx)
-
Server.MapPath("..")
возвращает родительский каталог
-
Server.MapPath("~")
возвращает физический путь к корню
приложение
-
Server.MapPath("/")
возвращает физический путь к корню
доменное имя (не обязательно совпадает с корнем
приложение)
Пример:
Скажем, вы указали приложение веб-сайта (http://www.example.com/) на
C:\Inetpub\wwwroot
и установил приложение вашего магазина (суб-веб как виртуальный каталог в 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
возвращает путь относительно каталога обрабатываемого запроса.
Примечание: в С#, @является оператором строковой строки, означающим, что строка должна использоваться как "как есть" и не обрабатываться для escape-последовательностей.
Сноска
Server.MapPath(null)
и Server.MapPath("")
тоже произведут этот эффект.