137

我正在尝试获取 C# 类中某些文件的绝对路径。 Server.MapPath当然,对于 ASPX 及其代码隐藏页面来说效果很好,但这在另一个类文件中不存在。我试过HostingEnvironment.MapPath()了,但这抱怨不允许使用相对虚拟路径。有什么想法吗?

System.Web已经导入。

4

9 回答 9

312

该类ServerUtility可作为您的HttpContext. 如果您处于知道它将在 ASP.Net 管道内执行的环境中,则可以使用

HttpContext.Current.Server.MapPath()

不过,您必须导入System.Web

于 2009-07-27T19:41:14.690 回答
34

您还可以使用:

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

如果

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

无法访问

于 2014-03-02T14:47:56.413 回答
10

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

编辑:现在我建议使用HostingEnvironment.MapPathMethod

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

于 2009-07-27T19:41:31.350 回答
4
System.Reflection.Assembly.GetAssembly(type).Location

如果您尝试获取的文件是某个类型的程序集位置。但是,如果文件是相对于程序集位置的,那么您可以将其与System.IO命名空间一起使用来获取文件的确切路径。

于 2009-07-27T19:45:55.757 回答
4

我也用这个:

System.Web.HTTPContext.Current.Server.MapPath
于 2011-07-27T17:01:16.950 回答
3
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);
}

这样,您的代码就很简单,并且通过一种方法,您可以为每个调用使用多个路径:)

于 2011-04-14T17:46:04.553 回答
3

这个对我有帮助

//System.Web.HttpContext.Current.Server.MapPath //        
FileStream fileStream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/File.txt"),
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
于 2014-12-26T08:30:21.960 回答
1

无论您是否在 ASP.NET 的上下文中运行,您都应该能够使用 HostingEnvironment.ApplicationPhysicalPath

于 2015-07-30T21:51:30.310 回答
0

server.mappath("") 将在 aspx 页面上工作,如果你想从类文件中获取绝对路径,你必须使用这个 -

HttpContext.Current.Server.MapPath("~/EmailLogic/RegistrationTemplate.html")
于 2018-03-26T18:57:17.040 回答