C# 如何从url获取文件名

C# 如何从url获取文件名,c#,asp.net,C#,Asp.net,我有像http://xxx.xxx.xxx/mls/pmmls/12/-8/53/6/12-8536_2.jpg/t1349940727/100x100/ 并且只需要从url获取文件名,如“12-8536_2.jpg” 我尝试了Path.GetFileName(),但它给出了“” 有人知道如何提取此类url的文件名吗?不能保证url的任何部分都映射到文件,因此尝试在url中获取文件名是没有意义的。如果您知道文件名后面始终会有两个进一步的段(在您的示例中,t1349940727和100x100),

我有像
http://xxx.xxx.xxx/mls/pmmls/12/-8/53/6/12-8536_2.jpg/t1349940727/100x100/
并且只需要从url获取文件名,如“
12-8536_2.jpg”

我尝试了Path.GetFileName(),但它给出了“”


有人知道如何提取此类url的文件名吗?

不能保证url的任何部分都映射到文件,因此尝试在url中获取文件名是没有意义的。

如果您知道文件名后面始终会有两个进一步的段(在您的示例中,
t1349940727
100x100
),你可以

var input =
    "http://xxx.xxx.xxx/mls/pmmls/12/-8/53/6/12-8536_2.jpg/t1349940727/100x100/";
var uri = new Uri(input);
var fileName = uri.Segments[uri.Segments.Length - 3];
如果您不知道这一点,那么正如其他人所说,很难判断文件名是哪个部分。你可以试试

var fileName = url.Segments.Last(seg => seg.Contains("."));

获取最后一个带有点的段。

12-8536_2.jpg似乎不是该URL中的文件。在任何情况下,如果URL中的“文件名”始终为.jpg,则可以将URL输出为字符串(或作为字符串)并使用正则表达式:

string filename = Regex.Match(URL,@"\/([A-Za-z0-9\-._~:?#\[\]@!$%&'()*+,;=]*).jpg").Groups[1].Value
编辑:我认为这是针对一个特定文件具有不同预览大小的站点。您还可以指定不同的可能扩展,如下所示(例如):


您应该定义扩展名列表,如.jpg、.png.gif(所有您期望的文件类型)

将url转换为字符串(如果尚未转换),并尝试查找扩展的索引。现在您知道了文件名的位置以及是否存在文件名。删除文件名后的所有内容

现在找到一个“/”标记,并删除“/”之前的部分(包括“/”),重复此操作直到您无法再找到“/”(例如使用while函数)


有关如何执行此操作的详细信息,请参见

如果您说文件名可能包含扩展名,也可能不包含扩展名,那么您将如何区分文件名与其他字符串值?人类必须能够告诉文件名,才能编写一个程序来为他们这样做。你打算对表单的URL做什么?也许
t1349940727
是文件名不是
12-8536_2.jpg
:)上面的正则表达式将忽略这一点(忘记了百分比代码)-只需在第一个括号中的某个地方放一个百分比,在大括号内-例如,在美元符号旁边,如so@“\/([A-Za-z0-9\。\:?\[]@!$%&'()*+,;=]*)(.jpg|.jpg|.jpeg|.jpeg)”。我在上面编辑了我的答案。请进一步解释这个答案
string filename = Regex.Match(URL,@"\/([A-Za-z0-9\-._~:?#\[\]@!$%&'()*+,;=]*).jpg").Groups[1].Value
string filename = Regex.Match(URL,@"\/([A-Za-z0-9\-._~:?#\[\]@!$%&'()*+,;=]*)(.jpg|.JPG|.jpeg|.JPEG)").Groups[1].Value
static string getFileName(string url) {
    string[] arr = url.Split('/');
    return arr[arr.Length - 1];
}