NSString:更改文件名但不更改扩展名

时间:2010-07-28 16:49:50

标签: objective-c nsstring

这样的时间和我的Objective-C noobness显示。 : - /

所以,我在日常工作中做的越多,它变得越复杂,我想知道是否有一个简单的方法来改变路径中文件名的名称。基本上,我想将@"/some/path/abc.txt更改为@"/some/path/xyz.txt - 替换文件名部分但不更改路径或扩展名。

谢谢!

5 个答案:

答案 0 :(得分:6)

尝试以下方法:

NSString* initPath = ...
NSString *newPath = [[NSString stringWithFormat:@"%@/%@",
                    [initPath stringByDeletingLastPathComponent], newFileName] 
                     stringByAppendingPathExtension:[initPath pathExtension]];

答案 1 :(得分:4)

弗拉基米尔说的是,只是为了让它更容易阅读而分解:

NSString *pathToFile = @"/Path/To/File.txt";
NSString *oldFileName = [pathToFile lastPathComponent];
NSString *newFileName = [@"Document" stringByAppendingPathExtension:[oldFileName pathExtension];
NSString *newPathToFile = [pathToFile stringByDeletingLastPathComponent];
[newPathToFile stringByAppendingString:newFileName];

答案 2 :(得分:3)

查看NSString docs的“使用路径”部分。特别是lastPathComponentpathExtensionstringByDeletingPathExtension:应该做你想做的事。

答案 3 :(得分:2)

您可以尝试这样的事情:

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:替换该范围内的内容。

答案 4 :(得分:1)

试试这个:

NSString* path = [startString stringByDeletingLastPathComponent];
NSString* extension = [startString pathExtension];
NSString* replacementFileName = [@"foo" stringByAppendingPathExtension: extension];
NSString result = [path stringByAppendingPathComponent: replacementFileName];