2011-11-10 16 views
9

Tengo una ruta de archivo de, por ejemplo, /Users/Documents/New York/SoHo/abc.doc. Ahora necesito recuperar /SoHo/abc.doc desde esta ruta.Obteniendo los 2 últimos directorios de una ruta de archivo

que han pasado por el siguiente:

  • stringByDeletingPathExtension -> Se utiliza para eliminar la extensión de la ruta.
  • stringByDeletingLastPathComponent -> para eliminar la última parte de la pieza.

Sin embargo, no encontré ningún método para eliminar la primera parte y mantener las dos últimas partes de una ruta.

Respuesta

0

¿Por qué no buscar los caracteres '/' y determinar los caminos de esa manera?

2
  1. Divida la cadena en componentes enviándola un mensaje pathComponents.
  2. Elimina todos los últimos dos objetos de la matriz resultante.
  3. unir los dos componentes de la ruta en una sola cadena con +pathWithComponents:
3

función especial que he escrito para usted:

- (NSString *)directoryAndFilePath:(NSString *)fullPath 
{ 

    NSString *path = @""; 
    NSLog(@"%@", fullPath); 
    NSRange range = [fullPath rangeOfString:@"/" options:NSBackwardsSearch]; 
    if (range.location == NSNotFound) return fullPath; 
    range = NSMakeRange(0, range.location); 
    NSRange secondRange = [fullPath rangeOfString:@"/" options:NSBackwardsSearch range:range]; 
    if (secondRange.location == NSNotFound) return fullPath; 
    secondRange = NSMakeRange(secondRange.location, [fullPath length] - secondRange.location); 
    path = [fullPath substringWithRange:secondRange]; 
    return path; 
} 

Sólo tiene que llamar:

[self directoryAndFilePath:@"/Users/Documents/New York/SoHo/abc.doc"]; 
11

NSString tiene cargas de los métodos de manejo de ruta que sería una pena no usar ...

NSString* filePath = // something 

NSArray* pathComponents = [filePath pathComponents]; 

if ([pathComponents count] > 2) { 
    NSArray* lastTwoArray = [pathComponents subarrayWithRange:NSMakeRange([pathComponents count]-2,2)]; 
    NSString* lastTwoPath = [NSString pathWithComponents:lastTwoArray]; 
} 
0

NSString * theLastTwoComponentOfPath; NSString * filePath = // GET Path;

NSArray* pathComponents = [filePath pathComponents]; 

    int last= [pathComponents count] -1; 
    for(int i=0 ; i< [pathComponents count];i++){ 

     if(i == (last -1)){ 
      theLastTwoComponentOfPath = [pathComponents objectAtIndex:i]; 
     } 
     if(i == last){ 
      theTemplateName = [NSString stringWithFormat:@"\\%@\\%@", theLastTwoComponentOfPath,[pathComponents objectAtIndex:i] ]; 
     } 
    } 

NSLog (@ "La última dos componentes =% @", theLastTwoComponentOfPath);

Cuestiones relacionadas