我在一个类中使用以下代码:
string filePath = HttpContext.Current.Server.MapPath("~/email/teste.html");
文件teste.html位于文件夹
中但是当它打开文件时,会生成以下错误:
对象引用未设置为对象的实例。
答案 0 :(得分:73)
不要使用Server.MapPath。这很慢。请改用HttpRuntime.AppDomainAppPath
。只要您的网站正在运行,您就可以随时使用此属性。
然后像这样使用它:
string filePath = Path.Combine(HttpRuntime.AppDomainAppPath, "email/teste.html");
答案 1 :(得分:6)
如果代码未在线程内运行,则执行httprequest
然后HttpContext.Current
为null
(例如,当您通过BeginInvoke
调用方法时) - 请参阅http://forums.asp.net/t/1131004.aspx/1。
您始终可以使用HttpRuntime
查看http://msdn.microsoft.com/en-us/library/system.web.httpruntime.aspx
答案 2 :(得分:4)
如果没有HttpContext
(例如,当通过BeginInvoke
调用方法时,正如Yahia所指出的那样),对HttpContext.Current.Server.MapPath()
的调用必定会失败。对于这些情况,HostingEnvironment.MapPath()
命名空间中有System.Web.Hosting
。
string filePath = HostingEnvironment.MapPath("~/email/teste.html");
答案 3 :(得分:0)
问题:我在一个类库项目中有一个“ Images”文件夹。但是使用上面的答案,我无法获取该文件夹的物理路径来读写该文件夹中的文件。
解决方案:下面的代码为我工作,以便在类库项目中获取物理路径。
string physicalPath = System.IO.Path.GetFullPath("..\\..\\Images");
我希望,它将对与我面临同样问题的人有所帮助。
答案 4 :(得分:0)
您可以使用类似以下代码的代码。需要注意的一件事是,我遇到了一个问题,我试图从TestMethod内访问.txt文件,但一切都失败了……是的,它也适用于非单元测试方案。>
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,@"..\..") + "\\email\\teste.html";