NSString: изменение имени файла, но не расширения - PullRequest
2 голосов
/ 28 июля 2010

Времена, подобные этому, и мои показы в Objective-C. : - /

Итак, чем больше я работаю над подпрограммой, чтобы сделать это, тем сложнее она становится, и мне интересно, не существует ли простого способа изменить имя файла в пути. По сути, я хочу изменить @"/some/path/abc.txt на @"/some/path/xyz.txt - заменяя часть имени файла, но не меняя путь или расширение.

Спасибо!

Ответы [ 5 ]

6 голосов
/ 28 июля 2010

Попробуйте следующее:

NSString* initPath = ...
NSString *newPath = [[NSString stringWithFormat:@"%@/%@",
                    [initPath stringByDeletingLastPathComponent], newFileName] 
                     stringByAppendingPathExtension:[initPath pathExtension]];
4 голосов
/ 28 июля 2010

То, что сказал Владимир, просто разбито больше, чтобы его было немного легче читать:

NSString *pathToFile = @"/Path/To/File.txt";
NSString *oldFileName = [pathToFile lastPathComponent];
NSString *newFileName = [@"Document" stringByAppendingPathExtension:[oldFileName pathExtension];
NSString *newPathToFile = [pathToFile stringByDeletingLastPathComponent];
[newPathToFile stringByAppendingString:newFileName];
3 голосов
/ 28 июля 2010

Взгляните на раздел "Работа с путями" в NSString документах .В частности, lastPathComponent, pathExtension и stringByDeletingPathExtension: должны делать то, что вы хотите.

2 голосов
/ 28 июля 2010

Вы можете попробовать что-то вроде этого:

NSRange slashRange = [myString rangeOfString:@"\\" options:NSBackwardsSearch];
NSRange periodRange = [myString rangeOfString:@"." options:NSBackwardsSearch];
NSString *newString = [myString stringByReplacingCharactersInRange:NSMakeRange(slashRange.location, periodRange.location) withString:@"replacement-string-here"];

Этот код делает то, что он получает расположение символов \ и . и выполняет обратный поиск, чтобы он возвращал последнее вхождениеоб этом в строке.Затем он создает новый диапазон на основе этих предыдущих диапазонов и заменяет содержимое этого диапазона на stringByReplacingCharactersInRange:.

1 голос
/ 28 июля 2010

Попробуйте это:

NSString* path = [startString stringByDeletingLastPathComponent];
NSString* extension = [startString pathExtension];
NSString* replacementFileName = [@"foo" stringByAppendingPathExtension: extension];
NSString result = [path stringByAppendingPathComponent: replacementFileName];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...