ASP.NET Server.Mappath проблема из внутренних папок - PullRequest
2 голосов
/ 21 июля 2009

У меня есть приложение ASP.NET, в котором в папке APP_Code есть класс. У меня есть следующий код для чтения содержимого файла XML, который находится в моей корневой папке

XmlDocument xmlSiteConfig = new XmlDocument();
xmlSiteConfig.Load(System.Web.HttpContext.Current.Server.MapPath("../myConfig.xml"));

В моей корневой папке есть несколько папок с вложенными внутренними папками для некоторых. На первом уровне папок, когда я вызываю фрагмент кода в классе Appcode, я могу правильно загрузить файл XML, поскольку путь указан правильно. Теперь, если я вызываю тот же кусок кода из внутренней папки, я получаю сообщение об ошибке. Если я изменю код на приведенный ниже, он будет работать нормально

xmlSiteConfig.Load(System.Web.HttpContext.Current.Server.MapPath("../../myConfig.xml"));

Как я могу решить эту проблему. Я не хочу изменять путь к файлу для различных вызовов этого кода. С каким фрагментом кода я могу решить проблему, чтобы программа загружала файл XML независимо от позиции вызова. Любой совет?

Заранее спасибо

Ответы [ 5 ]

17 голосов
/ 21 июля 2009

Если он находится в корневой папке, используйте это:

Server.MapPath("~/myConfig.xml")

Это будет работать из любого каталога.

1 голос
/ 21 июля 2009

метод System.Web.HttpContext.Current.Server.MapPath ("") предназначен для получения корневого пути веб-приложения. поэтому System.Web.HttpContext.Current.Server.MapPath ("../ myConfig.xml") предназначен для получения родительского пути веб-приложения. это неправильно, если ваш файл не здесь. вместо этого вы можете использовать System.Web.HttpContext.Current.Server.MapPath ("/ path").

с другой стороны, вы можете использовать «~» для обозначения корневого пути в некотором элементе управления asp.net.

1 голос
/ 21 июля 2009

Префикс вашей строки пути с тильдой (~) - это представляет корень сайта:

xmlSiteConfig.Load(System.Web.HttpContext.Current.Server.MapPath("~/myConfig.xml"));
0 голосов
/ 19 мая 2012
Server.MapPath("~/MYXML.xml")

В этом значении "~" корневой каталог. Если вы хотите найти какой-либо подкаталог, вам нужно указать путь, например,

Server.MapPath("~/App_Data/MyXml.xml")
0 голосов
/ 21 июля 2009

Работает ли для вас Server.MapPath ("~ / xmlFile.xml")? ~ / Указывает .NET-приложению всегда запускаться из корня приложения. Если ваш XML-файл находится в подпапке (не там, где вы вызываете функцию, а в реальном физическом файле), вы должны использовать server.mappath ("~ / myfolder / xmlFile.xml").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...