Использование Сервера.MapPath во внешних классах C# в ASP.NET
Я пытаюсь получить абсолютный путь к определенным файлам в классе C#. Server.MapPath отлично работает, конечно, для ASPX и их кодовых страниц, но это не существует в другом файле класса. Я пытался HostingEnvironment.MapPath(), но жалуется, что относительный виртуальный путь не допускается. Есть мысли?
System.Web уже импортированы.
9 ответов:
The
ServerUtilityкласс доступен как экземпляр в своемHttpContext. Если вы находитесь в среде, где вы знаете, что он будет выполнен внутри ASP.Net трубопровод, вы можете использоватьHttpContext.Current.Server.MapPath()вам придется импортировать
System.Webхотя.
вы также можете использовать:
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")Если
var path = Server.MapPath("~/App_Data"); var fullpath = Path.Combine(path , "myfile.txt");недоступен
вы не можете просто добавить ссылку
System.Webи тогда вы можете использоватьServer.MapPath?Edit: в настоящее время я бы рекомендовал использовать
HostingEnvironment.MapPathметод:это статический метод в
System.Webсборка, которая сопоставляет виртуальный путь с физическим путем на сервере. Это не требуютHttpContext.
System.Reflection.Assembly.GetAssembly(type).LocationЕсли файл, который вы пытаетесь получить, является местом сборки для типа. Но если файлы относятся к местоположению сборки, то вы можете использовать это с
System.IOпространства имен, чтобы получить точный путь к файлу.
class test { public static void useServerPath(string path) { if (File.Exists(path) { \...... do whatever you wabt } else { \..... } }теперь, когда вы вызываете метод из codebehind
например :
protected void BtAtualizacao_Click(object sender, EventArgs e) { string path = Server.MapPath("Folder") + "\anifile.txt"; test.useServerPath(path); }таким образом, ваш код прост и с одним методом u может использовать несколько путей для каждого вызова :)
это помогло мне
//System.Web.HttpContext.Current.Server.MapPath // FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
работаете ли вы в контексте ASP.NET или нет, вы должны быть в состоянии использовать HostingEnvironment.ApplicationPhysicalPath
сервер.mappath ("") будет работать на странице aspx,если вы хотите получить абсолютный путь из файла класса, который вы должны использовать-
HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")
Comments