物理,相对,绝对和其他路径

时间:2012-11-01 12:55:26

标签: c# .net path uri unc

我有一个任务是编写一个可以接收不同类型路径/ 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#是否是物理路径,相对网址或绝对网址?

我认为相对容易知道它是相对的还是绝对的uri,但是如何知道它是否是UNC路径?

我尝试使用Uri对象并且它是IsUnc属性,但它并没有真正帮助我....对于c:\ temp它返回false,对于“/ temp”,“temp /”和“temp”它会抛出一个格式不正确的例外。在.NET 3.5中是否存在任何可以帮助我的内置对象,或者我可以使用什么算法来确定路径的类型?

1 个答案:

答案 0 :(得分:28)

试试这个:

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