这样的时间和我的Objective-C noobness显示。 : - /
所以,我在日常工作中做的越多,它变得越复杂,我想知道是否有一个简单的方法来改变路径中文件名的名称。基本上,我想将@"/some/path/abc.txt
更改为@"/some/path/xyz.txt
- 替换文件名部分但不更改路径或扩展名。
谢谢!
答案 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的“使用路径”部分。特别是lastPathComponent
,pathExtension
和stringByDeletingPathExtension:
应该做你想做的事。
答案 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];