我们知道虚拟指令可以链接到具有不同名称的文件夹,如何获取虚拟目录的物理路径?
我一直在尝试使用HttpContext.Current.server.MapPath,但它返回物理路径加上我在参数中发送的路径,即使该目录甚至不存在,或者它是否存在不同的名称。
例如:
C:\布拉布拉\网站\应用1 \ Imaageesss - 光盘上
Application1 \ Images(在国际空间站,我的虚拟目录)
但如果我在“/ Images”上做一个MapPath,它永远不会给我 C:\ blabla \ Sites \ Application1 \ Imaageesss但是 C:\ inetpub \ wwwroot \ Images不是链接到的真实目录。
答案 0 :(得分:9)
Server.MapPath("~/Images")
是正确的方法,因为“〜”引用了应用程序的根目录。
答案 1 :(得分:6)
这对我有用:
string physicalPath =
System.Web.Hosting.HostingEnvironment.MapPath(HttpContext.Current.Request.ApplicationPath);
答案 2 :(得分:3)
如果你尝试这个小片段怎么办?
string physicalPath = HttpContext.Current.Request.MapPath(appPath);
答案 3 :(得分:1)
经过一些研究后,我能够创建一种方法来获取虚拟IIS目录的物理路径:
public static string VirtualToPhysicalPath(string vPath) {
// Remove query string:
vPath = Regex.Replace(vPath, @"\?.+", "").ToLower();
// Check if file is in standard folder:
var pPath = System.Web.Hosting.HostingEnvironment.MapPath("~" + vPath);
if (System.IO.File.Exists(pPath)) return pPath;
// Else check for IIS virtual directory:
var siteName = System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
var sm = new Microsoft.Web.Administration.ServerManager();
var vDirs = sm.Sites[siteName].Applications[0].VirtualDirectories;
foreach (var vd in vDirs) {
if (vd.Path != "/" && vPath.Contains(vd.Path.ToLower())) pPath = vPath.Replace(vd.Path.ToLower(), vd.PhysicalPath).Replace("/", "\\");
}
return pPath;
}
警告:此解决方案假设您只有一个根应用程序(Applications [0])。
答案 4 :(得分:0)
这可能会回答你的问题:
http://msdn.microsoft.com/en-us/library/system.web.httprequest.physicalpath.aspx
但是,我目前无法提供一个例子,因为我有很多工作要做。当我找到一些时间时,我会发送详细信息。
答案 5 :(得分:0)
以下内容应该可以正常工作:
var physicalPath = HostingEnvironment.MapPath("~/MyVirtualDirectory");