C# 从 URI 字符串获取文件名
我有这个方法可以从字符串 URI 中获取文件名。 我能做些什么来让它更强大?
private string GetFileName(string hrefLink)
{
string[] parts = hrefLink.Split('/');
string fileName = "";
if (parts.Length > 0)
fileName = parts[parts.Length - 1];
else
fileName = hrefLink;
return fileName;
}
I have this method for grabbing the file name from a string URI. What can I do to make it more robust?
private string GetFileName(string hrefLink)
{
string[] parts = hrefLink.Split('/');
string fileName = "";
if (parts.Length > 0)
fileName = parts[parts.Length - 1];
else
fileName = hrefLink;
return fileName;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
您可以创建一个 System.Uri 对象,并使用 IsFile 验证它是一个文件,然后 Uri.LocalPath 提取文件名。
这更安全,因为它还为您提供了一种检查 URI 有效性的方法。
编辑回应评论:
为了获得完整的文件名,我会使用:
这会为您进行所有错误检查,并且与平台无关。 所有特殊情况都可以快速轻松地为您处理。
You can just make a System.Uri object, and use IsFile to verify it's a file, then Uri.LocalPath to extract the filename.
This is much safer, as it provides you a means to check the validity of the URI as well.
Edit in response to comment:
To get just the full filename, I'd use:
This does all of the error checking for you, and is platform-neutral. All of the special cases get handled for you quickly and easily.
Uri.IsFile 不适用于 http url。 它仅适用于“file://”。
来自MSDN:“当Scheme 属性等于UriSchemeFile 时,IsFile 属性为true。”
所以你不能依赖于此。
Uri.IsFile doesn't work with http urls. It only works for "file://".
From MSDN : "The IsFile property is true when the Scheme property equals UriSchemeFile."
So you can't depend on that.
大多数其他答案要么不完整,要么不处理路径(查询字符串/哈希)之后的内容。
检测结果:
Most other answers are either incomplete or don't deal with stuff coming after the path (query string/hash).
Test results:
接受的答案对于 http url 来说是有问题的。 此外
Uri.LocalPath
进行 Windows 特定的转换,并且正如有人指出的那样,将查询字符串留在其中。 更好的方法是使用Uri.AbsolutePath< /code>
对 http url 执行此操作的正确方法是:
The accepted answer is problematic for http urls. Moreover
Uri.LocalPath
does Windows specific conversions, and as someone pointed out leaves query strings in there. A better way is to useUri.AbsolutePath
The correct way to do this for http urls is:
我认为这将满足您的需求:
I think this will do what you need:
当然,这是假设您已经解析出文件名。
编辑#2:
这应该处理文件名中的空格等。
THis assumes, of course, that you've parsed out the file name.
EDIT #2:
This should handle spaces and the like in the file name.
截至 2020 年,处理查询字符串和 编码的 URL
As of 2020, handles query strings & encoded URLs
这是我的示例,您可以使用:
用法:
this is my sample you can use:
Usage:
简单直接:
Simple and straight forward: