Добавить суффикс к имени файла перед расширением - PullRequest
4 голосов
/ 17 октября 2010

Какой самый простой способ добавить суффикс к имени файла перед расширением в Objective-C?

* ** 1003 тысяча два * Пример
  • Оригинальное имя: image.png
  • Суффикс: ~ipad
  • Результат: image~ipad.png

Ответы [ 3 ]

12 голосов
/ 17 октября 2010

NSString имеет целый ряд методов, связанных с путями:

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

(Да, вы можете сделать это с гораздо меньшим количеством переменных, но я хотел пояснить, что делает каждый метод)

2 голосов
/ 13 мая 2015

знаю, что он старый, но думал, что кому-то может понравиться это решение 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")
    }
}

Тогда назови это так

let mytxt = "/somepath/file.jpg"
let retina = mytxt.appendSuffixBeforeExtension("@x2")
0 голосов
/ 03 октября 2014

Приведенное выше решение не будет работать для имени файла, например ../filename.pvr.ccz

Итак, я немного подправил его для учета нескольких расширений файлов:

-(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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...