Получение последних 2 каталогов пути к файлу - PullRequest
9 голосов
/ 10 ноября 2011

У меня есть путь к файлу, например /Users/Documents/New York/SoHo/abc.doc.Теперь мне нужно просто извлечь /SoHo/abc.doc из этого пути.

Я прошел через следующее:

  • stringByDeletingPathExtension -> используется для удаления расширения из пути.
  • stringByDeletingLastPathComponent -> для удаления последней части в детали.

Однако я не нашел способа удалить первую часть и сохранить последние две части пути.

Ответы [ 5 ]

11 голосов
/ 10 ноября 2011

NSString имеет множество методов обработки пути, которые было бы стыдно не использовать ...

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];
}
3 голосов
/ 10 ноября 2011

Я написал специальную функцию для вас:

- (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;
}

Просто позвоните:

[self directoryAndFilePath:@"/Users/Documents/New York/SoHo/abc.doc"];
2 голосов
/ 10 ноября 2011
  1. Разделите строку на компоненты, отправив ей сообщение pathComponents.
  2. Удалите все, кроме двух последних объектов, из полученного массива.
  3. Соедините два компонента пути вместев одну строку с +pathWithComponents:
0 голосов
/ 02 августа 2013

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 (@ "Последние два компонента =% @", theLastTwoComponentOfPath);

0 голосов
/ 10 ноября 2011

Почему бы не найти символы '/' и не определить пути таким образом?

...