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.
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");
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
If there is no HttpContext
(eg 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");
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.
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";
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.