Reputation: 1696
I am using the following code within a class:
string filePath = HttpContext.Current.Server.MapPath("~/email/teste.html");
The file teste.html is in the folder
But when it will open the file the following error is being generated:
Object reference not set to an instance of an object.
Upvotes: 44
Views: 65898
Reputation: 105
You can use something like the following piece of code. One thing to note is that I was facing an issue, where I was trying to access a .txt file from within a TestMethod and everything was failing except for this...and yeah it works for non-Unit Test Scenarios too.
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,@"..\..") + "\\email\\teste.html";
Upvotes: 1
Reputation: 371
Issue: I had an "Images" folder inside a class library project. But using the above answers, I was not able to get the physical path of the folder to read/write the files inside that folder.
Solution: The below code worked for me to get a physical path in the class library project.
string physicalPath = System.IO.Path.GetFullPath("..\\..\\Images");
I hope, it will help someone who is facing the same issue as me.
Upvotes: 0
Reputation: 3953
If there is no HttpContext
(e.g. when the method is called via BeginInvoke
, as Yahia pointed out), the call to HttpContext.Current.Server.MapPath()
must fail. For those scenarios, there's HostingEnvironment.MapPath()
in the System.Web.Hosting
namespace.
string filePath = HostingEnvironment.MapPath("~/email/teste.html");
Upvotes: 7
Reputation: 70369
if the code is not running from within a thread is executing a httprequest
then HttpContext.Current
is null
(for example when you method is called via BeginInvoke
) - see http://forums.asp.net/t/1131004.aspx/1 .
You can always use HttpRuntime
see http://msdn.microsoft.com/en-us/library/system.web.httpruntime.aspx
Upvotes: 8
Reputation: 6981
Don't use Server.MapPath. It's slow. Use this instead, HttpRuntime.AppDomainAppPath
. As long as your web site is running, this property is always available to you.
Then use it like this:
string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");
Upvotes: 86