【发布时间】:2023-03-30 10:37:01
【问题描述】:
我的任务是编写一个可以接收不同类型的路径/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 中是否存在任何可以帮助我解决此问题的内置对象,或者我可以使用什么算法来确定路径的类型?
【问题讨论】:
-
嗯,"/temp" 确实根本不是 URI。您要检查的确切格式是什么?如果只是路径和 URI,您可以先区分它们,然后对它们应用不同的技术。
-
为什么“/temp”不是有效的URI?我认为它可以解释为相对的。我需要检查所有这些格式并确定它是什么类型...是 UNC 路径还是 URI 路径...我如何区分它们?
-
好吧,tools.ietf.org/html/rfc3986。它不以方案开头,例如(http: 或 file: 可以)
-
您可以尝试 (1) 使用
new Uri(s)或Uri.TryCreate将字符串解析为URI; (2) 如果失败,尝试将字符串视为路径 -
我试过了,但是对于 C:\Temp,new Uri() 没有失败,但是 IsUnc 属性返回 false