2010-10-17 24 views

Répondre

11

NSString a tout un tas de méthodes liées à la route:

NSString * appendSuffixToPath(NSString * path, NSString * suffix) { 
    NSString * containingFolder = [path stringByDeletingLastPathComponent]; 
    NSString * fullFileName = [path lastPathComponent]; 
    NSString * fileExtension = [fullFileName pathExtension]; 
    NSString * fileName = [fullFileName stringByDeletingPathExtension]; 
    NSString * newFileName = [fileName stringByAppendingString:suffix]; 
    NSString * newFullFileName = [newFileName stringByAppendingPathExtension:fileExtension]; 

    return [containingFolder stringByAppendingPathComponent:newFullFileName]; 
} 

(Oui, vous pouvez le faire avec beaucoup moins de variables, mais je voulais préciser ce que chaque méthode a été fait)

+0

Merci Dave! Je pensais qu'il y avait quelque chose comme stringByDeletingPathExtension disponible dans Obj-C. – hpique

0

La solution ci-dessus ne fonctionnerait pas pour le nom de fichier tels que ../filename. pvr.ccz

J'ai pincé un peu pour tenir compte de plusieurs extensions de nom de fichier:

-(NSString *)appendSuffixToPath:(NSString *)pPath withSuffix:(NSString *)pSuffix { 
    NSString * containingFolder = [pPath stringByDeletingLastPathComponent]; 
    NSString * fullFileName = [pPath lastPathComponent]; 

    NSMutableArray *extensions = [[NSMutableArray alloc] init]; 
    NSString * fileExtension = [fullFileName pathExtension]; 
    [extensions addObject:fileExtension]; 

    NSString * fileName = [fullFileName stringByDeletingPathExtension]; 
    while([fileName pathExtension].length > 0){ 
     fileExtension = [fileName pathExtension]; 
     [extensions addObject:fileExtension]; 
     fileName = [fileName stringByDeletingPathExtension]; 
    } 

    NSString * newFileName = [fileName stringByAppendingString:pSuffix]; 

    NSString * newFullFileName = newFileName; 
    while ([extensions count] > 0) { 
     newFullFileName = [newFullFileName stringByAppendingPathExtension:[extensions objectAtIndex:((int)[extensions count] - 1)]]; 
     [extensions removeObjectAtIndex:((int)[extensions count] - 1)]; 
    } 

    NSString *result = [containingFolder stringByAppendingPathComponent:newFullFileName]; 
    return result; 
} 
2

sais que c'est vieux mais pensé que quelqu'un peut aimer cette solution Swift

extension String { 
func appendSuffixBeforeExtension(suffix: String) -> String { 
     let regex = NSRegularExpression(pattern: "(\\.\\w+$)", options: nil, error: nil) 
     return regex!.stringByReplacingMatchesInString(self, options: nil, range: NSMakeRange(0, count(self)), withTemplate: "\(suffix)$1") 
    } 
} 

appeler ensuite comme si

let mytxt = "/somepath/file.jpg" 
let retina = mytxt.appendSuffixBeforeExtension("@x2")