Подтвердить что ты не робот

Физические, относительные, абсолютные и другие пути

У меня есть задача написать объект, который может получать разные типы путей/URL-адресов и возвращать тип пути/URL-адреса. Например, путь может быть

1. [drive]:\Temp 
2. \\Temp 
3. Temp (assuming that it relative Temp), 
4. /Temp 
5. ~/Temp 
6. file://[drive]:/Temp 
7. file://Temp 
8. [scheme]://something/Temp

... и т.д.

Как я могу проверить C#, если это физический путь, относительный URL-адрес или абсолютный URL-адрес?

Я думаю, что относительно легко узнать, является ли это относительным или абсолютным uri, но как узнать, есть ли путь UNC?

Я попытался использовать объект Uri и его свойство IsUnc, но это не помогает мне.... для c:\temp он возвращает false, для "/temp", "temp/" и "temp" он выбрасывает исключение, что формат неверен. Существует ли какой-либо встроенный объект в .NET 3.5, который может помочь мне с этим, или какой алгоритм я могу использовать для определения типа пути?

4b9b3361

Ответ 1

Попробуйте следующее:

var paths = new[]
{
   @"C:\Temp",
   @"\\Temp",
   "Temp",
   "/Temp",
   "~/Temp",
   "file://C:/Temp",
   "file://Temp",
   "http://something/Temp"
};

foreach (string p in paths)
{
   Uri uri;
   if (!Uri.TryCreate(p, UriKind.RelativeOrAbsolute, out uri))
   {
      Console.WriteLine("'{0}' is not a valid URI", p);
   }
   else if (!uri.IsAbsoluteUri)
   {
      Console.WriteLine("'{0}' is a relative URI", p);
   }
   else if (uri.IsFile)
   {
      if (uri.IsUnc)
      {
         Console.WriteLine("'{0}' is a UNC path", p);
      }
      else
      {
         Console.WriteLine("'{0}' is a file URI", p);
      }
   }
   else
   {
      Console.WriteLine("'{0}' is an absolute URI", p);
   }
}

Вывод:

'C:\Temp' - это URI файла
'\\ Temp' - путь UNC "Temp" - относительный URI
'/Temp' - относительный URI '~/Temp' - относительный URI 'file://C:/Temp' является файловым URI
'file://Temp' - путь UNC 'http://something/Temp' является абсолютным URI