12

我的任务是编写一个可以接收不同类型的路径/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还是绝对uri相对容易,但是如何知道它是否是UNC路径?

我尝试使用 Uri 对象,它是 IsUnc 属性,但它并没有真正帮助我....对于 c:\temp 它返回 false,对于 "/temp"、"temp/" 和 "temp" 它会引发格式异常是不正确的。是否存在任何可以帮助我解决此问题的内置对象.NET 3.5,或者我可以使用什么算法来确定路径的类型?

4

1 回答 1

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

于 2012-11-01T13:57:15.413 回答