用于获取URL的文件名的函数

时间:2010-03-14 00:04:24

标签: iphone

我有一些源代码来获取网址的文件名

例如:

http://www.google.com/a.pdf

我希望得到a.pdf

因为我可以得到的加入2个NSStrings的方法是'appendString',它只用于在右侧添加一个字符串,所以我打算从字符串'http://www.google.com/a.pdf'的右侧逐个检查每个字符。 ,当它到达char'/'时,停止检查,返回字符串fdp.a,之后我将fdp.a更改为a.pdf

源代码在

之下
-(NSMutableString *) getSubStringAfterH :  originalString:(NSString *)s0 
{
    NSInteger i,l;
    l=[s0 length];
    NSMutableString *h=[[NSMutableString alloc] init];

    NSMutableString *ttt=[[NSMutableString alloc] init  ];
     for(i=l-1;i>=0;i--) //check each char one by one from the right side of string 'http://www.google.com/a.pdf', when it reach at the char '/', stop
    {
        ttt=[s0 substringWithRange:NSMakeRange(i, 1)];
         if([ttt isEqualToString:@"/"]) 
        { 
            break;
        }
            else
        {
             [h appendString:ttt];
        } 
     }
     [ttt release];
     NSMutableString *h1=[[[NSMutableString alloc] initWithFormat:@""] autorelease];

    for (i=[h length]-1;i>=0;i--)
    {
            NSMutableString *t1=[[NSMutableString alloc] init ];
        t1=[h substringWithRange:NSMakeRange(i, 1)];
        [h1 appendString:t1];
            [t1 release];
    } 
    [h release];
    return h1;
}

h1可以重新启动coorect字符串a.pdf,但如果它返回到调用它的代码,则在一段时间后系统报告 '双免费 ***在malloc_error_break中设置断点以调试'

我检查了很长时间,如果我删除了代码

ttt = [s0 substringWithRange:NSMakeRange(i,1)];

一切都会好的(当然getSubStringAfterH无法返回我预期的正确结果。),没有报告错误。

我尝试将错误修复几个小时,但仍然没有任何线索。

欢迎任何评论

由于 interdev

6 个答案:

答案 0 :(得分:177)

如果url是NSString,则以下行完成工作:

NSString *filename = [url lastPathComponent];

如果url是NSURL,则执行以下操作:

NSString *filename = [[url path] lastPathComponent];

答案 1 :(得分:62)

试试这个:

修改:来自评论

NSString *url = @"http://www.google.com/a.pdf";
NSArray *parts = [url componentsSeparatedByString:@"/"];
NSString *filename = [parts lastObject];

答案 2 :(得分:9)

我认为如果您已经拥有NSURL对象,那么从iOS 4开始就可以使用lastPathComponent方法。

NSURL *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"];
NSString *filename = [url lastPathComponent];

答案 3 :(得分:3)

这更无错误,用于在URL中获取本地化名称。

NSString *localizedName = nil;
[url getResourceValue:&localizedName forKey:NSURLLocalizedNameKey error:NULL];

答案 4 :(得分:2)

Swift 3

假设您的网址为http://www.google.com/a.pdf

    let filename = url.lastPathComponent

    \\filename = "a.pdf"

答案 5 :(得分:1)

我还没有尝试过这个,但似乎你可能正在努力做到这一点。 iPhone库有NSURL类,我想你可以这样做:

NSString *url = [NSURL URLWithString:@"http://www.google.com/a.pdf"];
NSString *path = [url path];

绝对寻找内置功能。图书馆有更多的测试,并且会比你或我在一两个小时内写的任何东西(一般来说)更好地处理边缘情况。