NSURL *url = [NSURL fileURLWithPath:@"/Users"];
NSError *error;
NSArray *items = [[NSFileManager defaultManager]
contentsOfDirectoryAtURL:url
includingPropertiesForKeys:[NSArray array]
options:0
error:&error];
NSMutableArray *dirs = [NSMutableArray array];
for (NSURL *url in items) {
if (CFURLHasDirectoryPath((CFURLRef)url)) {
[dirs addObject:url];
}
}
}
Вы можете получить фантазию с блоками следующим образом:
NSPredicate *predicate = [NSPredicate predicateWithBlock:
^BOOL (id evaluatedObject, NSDictionary *bindings){
return CFURLHasDirectoryPath((CFURLRef)evaluatedObject); }];
NSArray *dirs = [items filteredArrayUsingPredicate:predicate]);
Следует отметить, что он попадает на диск только один раз и не тратит время на извлечение ненужных атрибутов. Создав NSURL
, вы всегда можете определить, является ли он каталогом, потому что он заканчивается на / (это определенное поведение). Это все, что делает CFURLHasDirectoryPath()
. На самом деле он не попадает на диск.