检查attributesOfItemAtPath返回的结果中的目录

时间:2016-01-08 16:57:27

标签: objective-c

在下面的代码中,我正在扫描目录中的内容,并试图确定一个孩子是目录还是文件:

NSString *child = [dir stringByAppendingPathComponent:candidate];
NSDictionary *candidate_attr = [self.manager attributesOfItemAtPath:child error:nil];
if(candidate_attr.fileType == NSFileTypeDirectory)
  [stack addObject:child];

将上面的指针比较与NSFileTypeDirectory一起使用是否合法,还是应该使用compare方法?我应该指出,上面的代码看起来像我期望的那样工作。

1 个答案:

答案 0 :(得分:3)

NSDictionary fileTypeNSString。因此它是一种对象类型。因此,您确实需要使用isEqual:(或isEqualToString:)。

if ([candidate_attr.fileType isEqualToString:NSFileTypeDirectory]) {
    // it's a directory
}

顺便说一句 - 如果它似乎与==一起使用,那仅仅是由于对不能依赖的字符串进行了一些可能的优化。

另一种检查文件是否是目录的方法是:

NSString *child = [dir stringByAppendingPathComponent:candidate];
BOOL isDir = NO;
if ([self.manager fileExistsAtPath:child isDirectory:&isDir]) {
    // child exists
    if (isDir) {
        // it's a directory
    } else {
        // it's not a directory
    }
} else {
    // child does't exist
}