The Question :
132 people think this question is useful
I’m trying to get the absolute path of certain files in a C# class. Server.MapPath
works great of course for ASPX and their code-behind pages, but that doesn’t exist in another class file. I tried HostingEnvironment.MapPath()
, but that complains that the relative virtual path isn’t allowed. Any thoughts?
System.Web
is already imported.
The Question Comments :
The Answer 1
306 people think this answer is useful
The ServerUtility
class is available as an instance in your HttpContext
. If you’re in an environment where you know it’ll be executed inside the ASP.Net pipeline, you can use
HttpContext.Current.Server.MapPath()
You’ll have to import System.Web
though.
The Answer 2
34 people think this answer is useful
you can also use:
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt")
if
var path = Server.MapPath("~/App_Data");
var fullpath = Path.Combine(path , "myfile.txt");
is inaccessible
The Answer 3
8 people think this answer is useful
Can’t you just add a reference to System.Web
and then you can use Server.MapPath
?
Edit: Nowadays I’d recommend using the HostingEnvironment.MapPath
Method:
It’s a static method in System.Web
assembly that Maps a virtual path to a physical path on the server. It doesn’t require a reference to HttpContext
.
The Answer 4
4 people think this answer is useful
System.Reflection.Assembly.GetAssembly(type).Location
IF the file you are trying to get is the assembly location for a type. But if the files are relative to the assembly location then you can use this with System.IO
namespace to get the exact path of the file.
The Answer 5
4 people think this answer is useful
I use this too:
System.Web.HTTPContext.Current.Server.MapPath
The Answer 6
3 people think this answer is useful
class test
{
public static void useServerPath(string path)
{
if (File.Exists(path)
{
\\...... do whatever you wabt
}
else
{
\\.....
}
}
Now when you call the method from the codebehind
for example :
protected void BtAtualizacao_Click(object sender, EventArgs e)
{
string path = Server.MapPath("Folder") + "\\anifile.txt";
test.useServerPath(path);
}
in this way your code is to simple and with one method u can use multiple path for each call ๐
The Answer 7
3 people think this answer is useful
This one helped for me
//System.Web.HttpContext.Current.Server.MapPath //
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
The Answer 8
1 people think this answer is useful
Whether you’re running within the context of ASP.NET or not, you should be able to use HostingEnvironment.ApplicationPhysicalPath
The Answer 9
0 people think this answer is useful
The server.mappath(“”) will work on aspx page,if you want to get the absolute path from a class file you have to use this-
HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")