Итак, у меня есть веб-проект, и я пытаюсь получить корневой каталог веб-сайта с помощью метода C # 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\
Может ли кто-нибудь объяснить, почему это происходит и какое возможное решение? Большое спасибо.
Ответы:
Текущий каталог является функцией системного уровня; он возвращает каталог, из которого был запущен сервер. Это не имеет ничего общего с сайтом.
Вы хотите
HttpRuntime.AppDomainAppPath
.Если вы используете HTTP-запрос, вы также можете позвонить
Server.MapPath("~/Whatever")
.источник
HttpRuntime.BinDirectory
, но это было легко определить в отладчике, как только я попробовал то, что вы упомянули в своем ответе.Server.MapPath
делает. Вам нужен stackoverflow.com/q/5823847/34397System.Web.HttpRuntime.AppDomainAppPath
иSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
HttpContext
естьSystem.Web.HttpContext.Current.Server.MapPath("~")
, а нетHttpRuntime
Используйте этот код:
Подробная ссылка:
Server.MapPath
указывает относительный или виртуальный путь для сопоставления с физическим каталогом.Server.MapPath(".")
возвращает текущий физический каталог исполняемого файла (например, aspx)Server.MapPath("..")
возвращает родительский каталогServer.MapPath("~")
возвращает физический путь к корню приложенияServer.MapPath("/")
возвращает физический путь к корню доменного имени (не обязательно совпадает с корнем приложения)Пример:
Допустим, вы указали приложение веб-сайта ( http://www.example.com/ ) на
и установил приложение вашего магазина (субвеб как виртуальный каталог в IIS, помеченный как приложение) в
Например, если вы позвоните
Server.MapPath
по следующему запросу:затем:
Если Path начинается с прямой (/) или обратной косой черты (),
MapPath
метод возвращает путь, как если бы Path был полным виртуальным путем.Если Path не начинается с косой черты,
MapPath
метод возвращает путь относительно каталога обрабатываемого запроса.Примечание. В C # @ - это буквальный строковый оператор, означающий, что строка должна использоваться «как есть» и не обрабатываться для управляющих последовательностей.
Сноски
Server.MapPath(null)
иServer.MapPath("")
будет производить такой же эффект.источник
System.Web.Hosting.HostingEnvironment.MapPath("~")
, что отлично работает, независимо отSystem.Web.HttpContext.Current