在下面的代码中,我正在扫描目录中的内容,并试图确定一个孩子是目录还是文件:
NSString *child = [dir stringByAppendingPathComponent:candidate];
NSDictionary *candidate_attr = [self.manager attributesOfItemAtPath:child error:nil];
if(candidate_attr.fileType == NSFileTypeDirectory)
[stack addObject:child];
将上面的指针比较与NSFileTypeDirectory一起使用是否合法,还是应该使用compare方法?我应该指出,上面的代码看起来像我期望的那样工作。
答案 0 :(得分:3)
NSDictionary fileType
是NSString
。因此它是一种对象类型。因此,您确实需要使用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
}