【发布时间】:2010-10-17 15:10:45
【问题描述】:
在 Objective-C 中,在扩展名之前为文件名添加后缀的最简单方法是什么?
示例
- 原名:
image.png - 后缀:
~ipad - 结果:
image~ipad.png
【问题讨论】:
标签: objective-c ios nsstring filenames
在 Objective-C 中,在扩展名之前为文件名添加后缀的最简单方法是什么?
示例
image.png
~ipad
image~ipad.png
【问题讨论】:
标签: objective-c ios nsstring filenames
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];
}
(是的,你可以用更少的变量来做到这一点,但我想弄清楚每种方法的作用)
【讨论】:
知道它很旧,但认为有人可能会喜欢这个 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")
【讨论】:
使用URL 方法:
let suffixedFileURL = fileURL
.deletingLastPathComponent()
.appendingPathComponent(
fileURL
.deletingPathExtension()
.lastPathComponent
.appending("suffix")
)
.appendingPathExtension(fileURL.pathExtension)
【讨论】:
上述解决方案不适用于 ../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;
}
【讨论】: