开发者

function to get the file name of an URL

I have some source code to get the file name of an url

for example:

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

I hope to get a.pdf

because the way to join 2 NSStrings I can get is 'appendString' which only for adding a string at right side, so I planned to 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 the checking, return string fdp.a , after that I change fdp.a to a.pdf

source codes are below

-(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 can reuturn the coorect string a.pdf, but if it returns to the codes where it was called, after a while system reports 'double free *** set a breakpoint in malloc_error_break to debug'

I checked a long time and foudn that if I removed the code

ttt=[s0 substringWithRange:NSMakeRang开发者_StackOverflowe(i, 1)];

everything will be Ok (of course getSubStringAfterH can not returns the corrent result I expected.), no error reported.

I try to fix the bug a few hours, but still no clue.

Welcome any comment

Thanks interdev


The following line does the job if url is a NSString:

NSString *filename = [url lastPathComponent];

If url is a NSURL, then the following does the job:

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


Try this:

Edit: from blow comment

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


I think if you have already had the NSURL object, there is lastPathComponent method available from the iOS 4 onwards.

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


Swift 3

Let's say that your url is http://www.google.com/a.pdf

    let filename = url.lastPathComponent

    \\filename = "a.pdf"


This is more error free and meant for getting the localized name in the URL.

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


I haven't tried this yet, but it seems like you might be trying to do this the hard way. The iPhone libraries have the NSURL class, and I imagine that you could simply do:

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

Definitely look for a built in function. The libraries have far more testing and will handle the edge cases better than anything you or I will write in an hour or two (generally speaking).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜