如何判断文件是否包含在目录中?

时间:2012-03-12 23:41:57

标签: cocoa-touch nsstring

判断文件是否包含在给定目录或其子目录中的正确方法是什么?

我想要类似的东西:

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

我可以将所有内容转换为字符串(包括在容器目录中附加“/”)并检查字符串匹配,但似乎应该有一个内置方法。

2 个答案:

答案 0 :(得分:1)

我认为简单的字符串匹配是正确的方法:

if (![directoryPath hasSuffix:@"/"]) directoryPath = [directoryPath stringByAppendingString:@"/"];
if ([filePath hasPrefix:directoryPath]) {
    // ...
}

请注意,这并不涉及符号链接或相对路径引入的复杂性。

答案 1 :(得分:1)

原则上,你的潜在愿望是不可能的。给定的文件路径可以包括通过符号或硬链接,使“包含”成为非常复杂的问题。这些类型的链接在iOS中并不常见,但iOS仍然是Unix,而在Unix中这样的东西是合法的。

所以你真正的问题实际上是一个路径说明符(字符串)是否包含在另一个中。因此,将路径检查为字符串是正确的方法。