我有一个任务是编写一个可以接收不同类型路径/ 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
中是否存在任何可以帮助我的内置对象,或者我可以使用什么算法来确定路径的类型?
答案 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