在Window Application中使用HttpContext.Current.Server.MapPath?

时间:2011-12-01 09:50:13

标签: c# .net

我可以在窗口应用程序中执行类似的操作吗?

HttpContext.Current.Server.MapPath("Email/ForgotPassword.txt"));

此项目是基于网络的应用程序。

我的下一个项目基本上是一个窗口服务......

寻求建议。

4 个答案:

答案 0 :(得分:6)

要获取运行Exe的路径(这是添加“电子邮件”等路径的好位置),请使用:

string filePath = Application.StartupPath + "\\Email\\ForgotPassword.txt";

当您在VS和.. \ Email路径上运行它时,此路径是.. \ bin \ debug \ Email路径。安装后运行它。

很少有替代方法可以像这些一样访问目录路径:

string appPath = Path.GetDirectoryName(Application.ExecutablePath);

using System.IO;
using System.Reflection;

string path = Path.GetDirectoryName(
                     Assembly.GetAssembly(typeof(MyClass)).CodeBase);

你可以使用Path类进行操作,比如获取完整路径,目录名等等。

查看此MSDN论坛帖子How to get the current directory path c# winfows for application以获取详细信息。

  

正如您所希望的那样将Windows应用程序视为Web ...但事实并非如此   可能的。

答案 1 :(得分:1)

如果您不处理来自ASP.NET(或更具体地说,System.Web)的请求,HttpContext.Current将为null。那么答案是:不,你不能做你想要的。也许:

Assembly.GetExecutingAssembly().Location

结合Path的方法会有用吗?

答案 2 :(得分:1)

正如其他人所说的那样,在Windows应用程序中无法提升全新的HttpContex。原因是虽然您可以获得一些事情,但其他事项是基于您在Web环境中运行的事实(例如 - 您将在.Current上下文的Request / Response属性中放置什么?)。

无论如何,你可以做一些事情 Enumerate the IIS Web Sites / Virtual Directories, and find yours(抱歉文章代码不好)。 然后,您可以获取该网站的目录,甚至 Open website's Web.Config and read it(对于糟糕的代码再次抱歉)。

基本上你正在查看DirectoryEntry,WebConfigurationFileMap和VirtualDirectoryMapping类,虽然我不太确定你最终会在哪里。

我仍然会要求您检查您的架构/问题。在Windows应用程序中需要HttpContext后,从一开始就可能出错。

也许如果您向我们提供更多详细信息,我们可以提供帮助吗?

答案 3 :(得分:0)

正如其他HttpContex所提到的那样,它不适用于Window Application,它是为Web应用程序而设计的。

要在Window应用程序中模拟HttpContext行为,您可以声明全局变量以便稍后在Application中使用它。

对于当前目录,您可以使用 Assembly.GetExecutingAssembly()。位置