无法使用Server.MapPath函数

134

我应该怎么做才能让Server.MapPath正常工作?
我已经使用了using System.Web;

还需要什么?当我输入Server时,没有快速结果选项(智能感知)出现。

有什么帮助吗?


1
你需要提供更多信息。这是什么样的项目?为什么要运行Server.MapPath?这是一个Web表单项目吗?你是在Page子类中编写代码还是在ASPX的渲染函数中编写代码? - Dai
C# Winforms.. 我希望它能够检查服务器上文件的可用性。 - a1204773
9个回答

313

你可以尝试使用这个

    System.Web.HttpContext.Current.Server.MapPath(path);

或者使用HostingEnvironment.MapPath

    System.Web.Hosting.HostingEnvironment.MapPath(path);

3
他们没有工作...错误1:命名空间'System.Web'中不存在类型或命名空间名为'HttpContext'的名称(您是否缺少程序集引用?)... 错误2:命名空间'System.Web'中不存在类型或命名空间名为'Hosting'的名称。 - a1204773
看起来你正在使用WinForms,那么你可能想看看这个链接:http://www.debugging.com/bug/18951 - DotNetUser
4
我也是,HostingEnvironment.MapPath 能够运作并且我在控制器之外使用它。 - Luke
1
首先,您的项目需要引用 System.Web.dll,然后它就可以工作了。 - ihebiheb
如何读取位于此目录“~/AppData/Roaming”中的文件? - Murlidhar Fichadia
1
对于我的情况,HostingEnvironment.MapPath("/MyFolder") 返回 c:\inetpub\wwwroot\。需要添加 HostingEnvironment.MapPath("~/MyFolder") 以返回正确的路径。 - sky91

19

您的项目需要引用程序集 System.Web.dll。 Server是类型为 HttpServerUtility 的对象。示例:

HttpContext.Current.Server.MapPath(path);

3
找不到这样的参考资料,我只找到了这两个:System.Web.ApplicationServices、System.Web.Services... - a1204773

8

System.Web.HttpContext.Current.Server.MapPath("~/") 如果我们从一个线程中调用它,将会返回 null。

因此,请尝试使用

System.Web.Hosting.HostingEnvironment.MapPath("~/")


2
首先添加对 System.web 的引用,如果您没有,请在 References 文件夹中完成。
然后可以使用 Hosting.HostingEnvironment.MapPath(path);

1
bool IsExist = System.IO.Directory.Exists(HttpContext.Current.Server.MapPath("/UploadedFiles/"));
if (!IsExist)
    System.IO.Directory.CreateDirectory(HttpContext.Current.Server.MapPath("/UploadedFiles/"));

StreamWriter textWriter = File.CreateText(Path.Combine(HttpContext.Current.Server.MapPath("/UploadedFiles/") + "FileName.csv"));
var csvWriter = new CsvWriter(textWriter, System.Globalization.CultureInfo.CurrentCulture);
csvWriter.WriteRecords(classVM);

3
仅包含代码的答案被认为是质量低下的,确保提供解释您的代码是如何解决问题的。如果您可以在帖子中添加更多信息,这将有助于提问者和未来的读者。请参见“解释完全基于代码的答案”。 - Calos

0

尝试将System.Web添加为您的项目引用。


0

0

我曾经遇到过同样的问题,我想这可能会对某些人有所帮助。正如这个问题的原始发布者所问:

我必须做什么才能让Server.MapPath工作?
我已经使用了System.Web;

我们编写的类应该实现System.Web.UI.Page

例如,假设我们的类名是MyClass

public class MyClass: System.Web.UI.Page
{
// Code runs here 
}

0

我知道这篇文章已经有几年了,但我的做法是在你的类的顶部添加这行代码,这样你仍然可以使用 Server.MapPath。

Dim Server = HttpContext.Current.Server

或者你可以创建一个函数

Public Function MapPath(sPath as String)
    return HttpContext.Current.Server.MapPath(sPath)
End Function

我一直致力于让事情变得更简单。为了以防万一再次遇到这种情况,我还将它添加到我的实用程序类中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接