在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