Iphone 获取文件路径的最后2个目录

Iphone 获取文件路径的最后2个目录,iphone,objective-c,ios,xcode,ipod-touch,Iphone,Objective C,Ios,Xcode,Ipod Touch,我有一个文件路径,例如/Users/Documents/newyork/SoHo/abc.doc。现在我只需要从这个路径中检索/SoHo/abc.doc 我经历了以下几点: stringByDeletingPathExtension->用于从路径中删除扩展 stringByDeletingLastPathComponent->删除零件中的最后一个零件 但是,我没有找到任何方法删除路径的第一部分并保留最后两部分。为什么不搜索“/”字符并以这种方式确定路径 通过向字符串发送pathCompone

我有一个文件路径,例如
/Users/Documents/newyork/SoHo/abc.doc
。现在我只需要从这个路径中检索
/SoHo/abc.doc

我经历了以下几点:

  • stringByDeletingPathExtension
    ->用于从路径中删除扩展
  • stringByDeletingLastPathComponent
    ->删除零件中的最后一个零件

但是,我没有找到任何方法删除路径的第一部分并保留最后两部分。

为什么不搜索“/”字符并以这种方式确定路径

  • 通过向字符串发送
    pathComponents
    消息,将字符串分成多个组件
  • 从结果数组中删除除最后两个对象以外的所有对象
  • 使用
    +pathWithComponents:

  • 我为你写了一个特别的函数:

    - (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"];
    

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

    NSString*路径的最后两个组件; NSString*filePath=//获取路径

        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] ];
            }
        }
    
    NSArray*pathComponents=[filePath pathComponents];
    int last=[pathComponents计数]-1;
    对于(int i=0;i<[pathComponents计数];i++){
    如果(i==(最后-1)){
    路径的最后两个组件=[pathComponents对象索引:i];
    }
    如果(i==最后一个){
    模板名称=[NSString stringWithFormat:@“\\%@\\%@”,路径的最后两个组件[pathComponents objectAtIndex:i];
    }
    }
    
    NSlog(@“最后两个组件=%@”,路径的最后两个组件)