解决IIS文件访问异常——Server.MapPath方法
台风天气还得来上班,不过拿人钱财,替人消灾啊。牢骚发完,该上工了!
今天要做一个js请求.net后台读写文件的功能,虽然很久没写.net/c#程序,但是还是很快搞定了,运行vs没问题,但是部署到IIS后,出状况了。
错误信息:
未能找到路径“c:\windows\system32\inetsrv\XXXXXXXXXXXXX”的一部分。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.IO.DirectoryNotFoundException: 未能找到路径“c:\windows\system32\inetsrv\XXXXXXXXXXXXXXX”的一部分。
我程序中写的是相对路径,看来vs和IIS的访问路径有差别,在网上找了一会儿,就有办法了。
解决办法:
Server.MapPath获得的路径都是服务器上的物理路径,也就是常说的绝对路径
1、Server.MapPath("/")
注:获得应用程序根目录所在的位置,如 C:\Inetpub\wwwroot\。
2、Server.MapPath("./")
注:获得所在页面的当前目录,等价于Server.MapPath("")。
3、Server.MapPath("../")
注:获得所在页面的上级目录。
4、Server.MapPath("~/")
注:获得当前应用级程序的目录,如果是根目录,就是根目录,如果是虚拟目录,就是虚拟目录所在的位置,如C:\Inetpub\wwwroot\Example\。
说明:
1.如果不知道使用using,可直接写System.Web.HttpContext.Current.Server.MapPath("/XXXX");
2.可能会提示无法操作文件,必须设置文件的操作权限(可写)。
宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒。