我想在cocoa app中获得相对路径。
离。
我怎么能得到这个?
答案 0 :(得分:1)
答案 1 :(得分:1)
如果您正在讨论基本路径的相对路径,则可以尝试NSString类中的componentsSeparatedByString方法。它返回一个数组。
例如,如果你有/User/boo/bar/sample.txt的NSString *输入,你通过以下方式调用方法:
[input componentsSeparatedByString:@"/"]
,你将得到一个4的数组。元素0 =用户,元素1 = boo,元素2 = bar,元素3 = sample.txt。
从那里你可以与你的基本路径进行比较,只使用剩下的并使用NSString类中的stringByAppendingPathComponent方法将它们追加回来。
答案 2 :(得分:0)
似乎没有这样做的内置方式。 Swift中的一个快速示例可能对某些人有用,但请记住,规则有很多例外,所以最好选择看起来不错的KSFileUtilities。
func relativePath(absolutePath : String, basePath : String) -> String {
var absolutePathComponents = absolutePath.pathComponents
var basePathComponents = basePath.pathComponents
if absolutePathComponents.count < basePathComponents.count {
return absolutePath
}
var levelIndex = 0 //number of basePath components in absolute path
for (index, baseComponent) in enumerate(basePathComponents) {
if (baseComponent != absolutePathComponents[index]) {
break
}
levelIndex++
}
if levelIndex == 0 {
return absolutePath
}
var relativePath : String = ""
if levelIndex < basePathComponents.count {
//outside of base path
for (var index = levelIndex; index < basePathComponents.count; index++) {
relativePath = relativePath.stringByAppendingPathComponent("../")
}
}
for(var index = levelIndex; index < absolutePathComponents.count; index++) {
relativePath = relativePath.stringByAppendingPathComponent(absolutePathComponents[index])
}
return relativePath
}