Path.GetFileName错误?

时间:2012-08-07 01:30:23

标签: .net

我的.NET应用程序的一部分需要获取输入字符串(表示URI)并仅返回文件名(如果适用,则返回扩展名)。

现在Path.GetFileName对大多数路径完全正常,但有以下异常:如果输入字符串是仅包含域名(例如example.com)和端口号(例如10210)的HTTP路径,GetFileName返回端口号。

简单英语:输入字符串是http://example.com:10210,它是一个链接到互联网广播流的URI。 使用该值调用Path.GetFileName时,返回值为10210

这是预期的行为吗?我不记得任何用冒号分隔路径段的平台。返回值不应该是String.Empty吗?

修改

似乎干净的解决方案是Uri.LocalPathSystem.Web.VirtualPathUtility.GetFileName之间的混搭,但这意味着将项目从客户端配置文件重新定位到完整框架。

我想我会在去除(包括)最后一个正斜杠符号之前删除所有内容。无论如何,分隔符在我的场景中永远不会改变这样做会给我example.com:10210作为返回值,这对我正在做的事情有意义。

3 个答案:

答案 0 :(得分:2)

查看docs on the Path class,看起来他们并不打算将它与http或ftp或类似的东西一起使用。所有示例都围绕本地文件路径和网络共享路径。

根据网络上的其他一些轶事信息such as this article about Path.Combine,我认为你不应该使用Path for HTTP。

答案 1 :(得分:0)

我无法确定这一点。这是我的猜测..

Path类旨在用于具有基础文件系统的路径。 (您的HTTP请求可能不指向文件系统。它可能只是一个动态生成的资源。)

您应该使用Uri类进行URI解析。

答案 2 :(得分:0)

Path.VolumeSeparatorChar(冒号)不是调用Path.GetInvalidPathChars的结果的一部分,Path.GetFileName用来验证输入是正常的。不幸的是,这似乎是预期的行为。