47 votes

pour obtenir le nom de fichier d'une URL

J'ai du code source pour obtenir le nom de fichier d'une url.

par exemple :

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

J'espère obtenir un .pdf

parce que la façon de joindre 2 NSStrings que je peux obtenir est 'appendString' qui ne permet que d'ajouter une chaîne à droite, donc j'ai prévu de vérifier chaque caractère un par un à partir du côté droit de la chaîne 'http://www.google.com/a.pdf', quand il atteint le caractère '/', arrêter la vérification, retourner la chaîne fdp.a , après quoi je change fdp.a en a.pdf

les codes sources sont ci-dessous

-(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 peut renvoyer la chaîne coorecte a.pdf, mais s'il retourne aux codes où il a été appelé, après un certain temps le système signale double libre * définir un point d'arrêt dans malloc_error_break pour déboguer'.

J'ai vérifié longtemps et j'ai trouvé que si je supprimais le code

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

tout sera Ok (bien sûr getSubStringAfterH ne peut pas retourner le résultat corrent que j'attendais.), aucune erreur signalée.

J'essaie de corriger le bug quelques heures, mais toujours pas d'indice.

Tout commentaire est le bienvenu

Merci interdev

177voto

attt Points 1281

La ligne suivante fait le travail si url est un NSString :

NSString *filename = [url lastPathComponent];

Si url est un NSURL, alors ce qui suit fait le travail :

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

62voto

DyingCactus Points 15843

Essayez ça :

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

9voto

Rpranata Points 827

Je pense que si vous avez déjà eu NSURL il y a lastPathComponent disponible à partir de l'iOS 4.

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

3voto

Jaspreet Singh Points 49

Cette méthode est plus exempte d'erreurs et permet d'obtenir le nom localisé dans l'URL.

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

1voto

marcc Points 8513

Je n'ai pas encore essayé, mais on dirait que vous essayez de faire ça à la dure. Les bibliothèques de l'iPhone ont le NSURL et j'imagine que vous pourriez simplement le faire :

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

Il faut absolument rechercher une fonction intégrée. Les bibliothèques ont beaucoup plus de tests et gèrent les cas limites mieux que ce que vous ou moi pouvons écrire en une heure ou deux (en général).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X