2012-11-05 49 views
-1

获取文件名我有喜欢的网址http://xxx.xxx.xxx/mls/pmmls/12/-8/53/6/12-8536_2.jpg/t1349940727/100x100/ ,需要从以下网址获得唯一的文件名,如“12-8536_2.jpg"如何从URL

url format is dynamic. Filename with extension must be in url. but it filename with extension may not be in last position of url 

我已经试过Path.GetFileName(),但它给 ”“。

是任何人都知道如何对此类URL提取文件名?

+1

如果你说的那个文件名可能或可能不包含扩展,那么你将如何与其他字符串值区分文件名?人类必须能够告诉文件名,以便他们编写一个程序来为他们做这件事。 – Ahmad

+0

您打算如何处理http://example.com/xxx/image.jpg/yyy/index.html/zzz形式的网址? – Oswald

+0

也许't1349940727'是文件名而不是'12-8536_2.jpg' :) –

回答

0

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

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 
+0

这个工作可以吗:'Will + this +%26 + this + work%3f.jpg'? –

+0

上面的正则表达式会错过它(忘记百分比代码) - 只需在括号内的第一个括号中放置%,例如除了像美元符号这样的@“\ /([A-Za-z0-9 \ -._〜:?#\ [\] @!$%&'()* +,; = = *)(。jpg | .JPG | .JPEG | .JPEG)”。我在上面编辑了我的答案。 – Tyress

1

没有保证,一个URL映射到一个文件的任何部分,所以它没有任何意义,试图获得文件名的URL。

0

如果您知道文件名会一直跟着另外两个段(在你的榜样,t1349940727100x100),你可以做

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(".")); 

在一个点得到的最后一段。

0

你应该定义扩展名的列表,如.jpg,.png格式.gif注意(你期望的所有文件类型)。

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

现在找到一个“/”标记,并删除(和包括)“/”之前的部分,重复此操作直到找不到“/”(例如使用一个while函数)。如何做到这一点

的更多信息,可以发现here

0
static string getFileName(string url) { 
    string[] arr = url.Split('/'); 
    return arr[arr.Length - 1]; 
} 
+0

更多地解释这个答案 – n1c9