C# 如何在c中解析web/windows应用程序中的相对路径#

C# 如何在c中解析web/windows应用程序中的相对路径#,c#,relative-path,path,C#,Relative Path,Path,我有一个assmebly,将用于桌面应用程序和asp.net网站 在这两种情况下,我都需要处理相对路径(本地文件,而不是URL) 如何实现此方法 string ResolvePath(string path); 在web环境下,我希望该方法的行为如下(其中d:\wwwroot\mywebsite是iis指向的文件夹): 对于桌面环境:(其中c:\program files\myprogram\bin\是.exe的路径) 我不希望根据其运行的状态注入不同的IPathResolver 如何检测我所

我有一个assmebly,将用于桌面应用程序和asp.net网站

在这两种情况下,我都需要处理相对路径(本地文件,而不是URL)

如何实现此方法

string ResolvePath(string path);
在web环境下,我希望该方法的行为如下(其中
d:\wwwroot\mywebsite
是iis指向的文件夹):

对于桌面环境:(其中
c:\program files\myprogram\bin\
是.exe的路径)

我不希望根据其运行的状态注入不同的
IPathResolver

如何检测我所处的环境,然后在每种情况下我需要做什么来解析可能的相对路径


正如约翰评论中提到的,谢谢你,相对于什么?您可以使用
System.IO.Path.Combine
方法将基本路径与相对路径组合,如:

 System.IO.Path.Combine(Environment.CurrentDirectory, relativePath);
您可以用所需的任何基本路径替换上行中的
Environment.CurrentDirectory


您可以将基本路径存储在配置文件中。

我认为原始问题没有得到回答

假设您想要“.\..\data\something.dat”相对于,比如“D:\myApp\source\bin”中的可执行文件。使用

System.IO.Path.Combine(Environment.CurrentDirectory,relativePath)

将简单地返回“D:\myApp\source\bin..\data\something.dat”,这也可以通过简单地连接字符串轻松获得。Combine不解析路径,它处理尾随的反斜杠和其他琐事。他可能想竞选:

System.IO.Path.GetFullPath(“D:\myApp\source\bin..\data\something.dat”)


要获取解析路径:“D:\myApp\data\something.dat”。

当应用程序运行时,网站二进制文件会复制到临时文件夹中,因此通常无法从执行程序集中获取相对路径

这可能不是一种明智的做法,但我为解决这个问题所做的是这样的:

if (filepath.StartsWith("~"))
{
   filepath = HttpContext.Current.Server.MapPath(filepath);
}
else
{
  filepath = System.IO.Path.Combine(Environment.CurrentDirectory, filepath);
}

这是因为在web版本中,相对路径前面有一个~所以我可以判断它是来自web.config还是App.config

相对路径是什么?程序集使用的文件?它是否与程序集一起部署?您可能想说明您正试图实现的目标,因为可能有更好的方法。在web环境中,相对于iis网站的根目录(上面示例中的d:\wwwroot\mywebsite)。当作为windows桌面应用程序运行时,.exe所在的目录(上例中的c:\program files\myprogram\bin)。
 System.IO.Path.Combine(Environment.CurrentDirectory, relativePath);
if (filepath.StartsWith("~"))
{
   filepath = HttpContext.Current.Server.MapPath(filepath);
}
else
{
  filepath = System.IO.Path.Combine(Environment.CurrentDirectory, filepath);
}