是否有.NET Framework方法将文件URI转换为带驱动器号的路径?

9w11ddsr  于 2023-03-24  发布在  .NET
关注(0)|答案(4)|浏览(134)

我正在ASP.NET领域中寻找类似Server.MapPath的东西,以便将Assembly.GetExecutingAssembly().CodeBase的输出转换为带有驱动器号的文件路径。
下面的代码适用于我尝试过的测试用例:

private static string ConvertUriToPath(string fileName)
{
    fileName = fileName.Replace("file:///", "");
    fileName = fileName.Replace("/", "\\");
    return fileName;
}

似乎.NET Framework中应该有一些东西会更好-我只是没有找到它。

svdrlsy4

svdrlsy41#

尝试查看Uri.LocalPath属性。

private static string ConvertUriToPath(string fileName)
{
   Uri uri = new Uri(fileName);
   return uri.LocalPath;

   // Some people have indicated that uri.LocalPath doesn't 
   // always return the corret path. If that's the case, use
   // the following line:
   // return uri.GetComponents(UriComponents.Path, UriFormat.SafeUnescaped);
}
0x6upsns

0x6upsns2#

我找了很多答案,最流行的答案是使用Uri.LocalPath。但是如果路径包含“#”,System.Uri无法给予正确的LocalPath。详细信息是here
我的解决方案是:

private static string ConvertUriToPath(string fileName)
{
   Uri uri = new Uri(fileName);
   return uri.LocalPath + Uri.UnescapeDataString(uri.Fragment).Replace('/', '\\');
}
x6492ojm

x6492ojm3#

你能用Assembly.Location吗?

wsewodh2

wsewodh24#

位置可以与CodeBase不同。例如,对于ASP.NET中的文件,它可能在c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET下解析。请参阅“Assembly.CodeBase与Assembly.Location”http://blogs.msdn.com/suzcook/archive/2003/06/26/57198.aspx

相关问题