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 に答える