Существует ли метод .NET Framework для преобразования файловых URI в пути с буквами дисков? - PullRequest
6 голосов
/ 10 ноября 2008

Я искал что-то вроде Server.MapPath в области ASP.NET для преобразования вывода Assembly.GetExecutingAssembly (). CodeBase в путь к файлу с буквой диска.

Следующий код работает для тестовых случаев, которые я пробовал:

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

Кажется, в .NET Framework должно быть что-то, что было бы намного лучше - я просто не смог найти его.

Ответы [ 4 ]

18 голосов
/ 10 ноября 2008

Попробуйте просмотреть свойство 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);
}
3 голосов
/ 23 февраля 2012

Я много искал ответ, и самый популярный ответ - Uri.LocalPath . Но System.Uri не может дать правильный LocalPath, если путь содержит «#». Подробности здесь .

Мое решение:

private static string ConvertUriToPath(string fileName)
{
   Uri uri = new Uri(fileName);
   return uri.LocalPath + Uri.UnescapeDataString(uri.Fragment).Replace('/', '\\');
}
0 голосов
/ 10 июня 2009

Местоположение может отличаться от 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

0 голосов
/ 10 ноября 2008

Можете ли вы просто использовать Assembly.Location?

...