判断文件是否包含在给定目录或其子目录中的正确方法是什么?
我想要类似的东西:
if ([directoryPath contains: filePath]) {
// file is in directory, or in a subdirectory of directory.
}
示例:
ContainerPath:/Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/AppName.app
不匹配:/Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/Documents/db/Sample Data
匹配:/Users/sfisher/Library/Application Support/iPhone Simulator/5.1/Applications/89A57CCB-250D-4D10-B913-EA456004B431/AppName.app/Samples/1
我可以将所有内容转换为字符串(包括在容器目录中附加“/”)并检查字符串匹配,但似乎应该有一个内置方法。
答案 0 :(得分:1)
我认为简单的字符串匹配是正确的方法:
if (![directoryPath hasSuffix:@"/"]) directoryPath = [directoryPath stringByAppendingString:@"/"];
if ([filePath hasPrefix:directoryPath]) {
// ...
}
请注意,这并不涉及符号链接或相对路径引入的复杂性。
答案 1 :(得分:1)
原则上,你的潜在愿望是不可能的。给定的文件路径可以包括通过符号或硬链接,使“包含”成为非常复杂的问题。这些类型的链接在iOS中并不常见,但iOS仍然是Unix,而在Unix中这样的东西是合法的。
所以你真正的问题实际上是一个路径说明符(字符串)是否包含在另一个中。因此,将路径检查为字符串是正确的方法。