Использование Сервера.MapPath во внешних классах C# в ASP.NET
Я пытаюсь получить абсолютный путь к определенным файлам в классе c#. Server.MapPath
отлично работает, конечно, для ASPX и их страниц кода, но это не существует в другом файле класса. Я пытался!--1-->, но жалуется, что относительный виртуальный путь не допускается. Есть мысли?
System.Web
уже импортированы.
9 ответов
на 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")