在ASP.NET的外部C#类中使用Server.MapPath

我试图获得C#类中某些文件的绝对path。 Server.MapPath对于ASPX及其代码隐藏页面来说是非常Server.MapPath ,但是在另一个类文件中并不存在。 我尝试HostingEnvironment.MapPath() ,但抱怨说,相对虚拟path是不允许的。 有什么想法吗?

System.Web已经被导入。

ServerUtility类在您的HttpContext作为实例提供。 如果你在一个你知道它将在ASP.Netpipe道内执行的环境中,你可以使用

 HttpContext.Current.Server.MapPath() 

你将不得不导入System.Web

你也可以使用:

 var path = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/myfile.txt") 

如果

 var path = Server.MapPath("~/App_Data"); var fullpath = Path.Combine(path , "myfile.txt"); 

是无法访问的

你不能只添加一个对System.Web的引用,然后你可以使用Server.MapPath

编辑:现在我build议使用HostingEnvironment.MapPath方法 :

这是System.Web程序集中的一个静态方法,它将虚拟path映射到服务器上的物理path。 它不需要HttpContext的引用。

 System.Reflection.Assembly.GetAssembly(type).Location 

如果您试图获取的文件是某个types的assembly位置。 但是,如果文件是相对于程序集的位置,那么你可以使用System.IO命名空间来获取文件的确切path。

我也使用这个:

 System.Web.HTTPContext.Current.Server.MapPath 

这个帮了我

 //System.Web.HttpContext.Current.Server.MapPath // FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); 
 class test { public static void useServerPath(string path) { if (File.Exists(path) { \\...... do whatever you wabt } else { \\..... } } 

现在,当您从代码隐藏中调用该方法时

例如 :

 protected void BtAtualizacao_Click(object sender, EventArgs e) { string path = Server.MapPath("Folder") + "\\anifile.txt"; test.useServerPath(path); } 

在这种方式你的代码是简单的,用一个方法可以使用多个path为每个呼叫:)

无论您是否在ASP.NET环境中运行,您都应该能够使用HostingEnvironment.ApplicationPhysicalPath