我想获取目录中的文件列表,但我需要知道该文件是否是目录,上次修改时的文件,以及其名称:)。所以我尝试了这个:
NSFileManager *fm = [NSFileManager defaultManager];
NSURL *directoryURL = [NSURL fileURLWithPath:@"/Users/nacho4d/Desktop/"];
NSArray *urls = [fm contentsOfDirectoryAtURL:directoryURL
includingPropertiesForKeys:[NSArray arrayWithObjects:NSURLNameKey, NSURLIsDirectoryKey, NSURLContentModificationDateKey, nil]
options:NSDirectoryEnumerationSkipsHiddenFiles
error:nil];
NSError *error = nil;
NSString *name;
NSDate *modificationDate;
NSNumber *isDirectory;
for (NSURL *url in urls) {
if (![url getResourceValue:&name forKey:NSURLNameKey error:&error]) {
NSLog(@"name: %@", [error localizedDescription]);error = nil;
}
if (![url getResourceValue:&modificationDate forKey:NSURLContentModificationDateKey error:&error]) {
NSLog(@"modificationDate: %@", [error localizedDescription]); error = nil;
}
if (![url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&error]) {
NSLog(@"isDirectory: %@", [error localizedDescription]); error = nil;
}
NSLog(@"%@ %@ %@", name, modificationDate, isDirectory);
}
但是我总是得到(null) (null) (null)
,没有错误但没有数据;(
我想知道这里有什么问题?
PS:我知道contentsOfDirectoryAtPath:error:
和attributesOfItemAtPath:error:
,但我认为这不是最好的方法,是吗?
我打算在包含大量文件的文件夹中使用它,所以我想以最有效的方式做到这一点。
正如@jeremyP指出的那样,According to the docs该方法在iOS4中未实现,但是从iOS5及更高版本开始它似乎正常工作:
状况
适用于iOS 5.0及更高版本。 (符号出现在iOS 4中,但不执行任何操作。)
这个问题是在我认为iOS4是最新版本时完成的。现在在iOS 5中 6一切都按预期工作:)
答案 0 :(得分:7)
这不是您问题的答案,但您的错误检查应如下所示:
if (![url getResourceValue:&name forKey:NSURLNameKey error:&error])
{
NSLog(@"name: %@", [error localizedDescription]);error = nil;
}
修改
无法弄清问题是什么,但刚刚重新阅读the documentation on the method。正在讨论的重要句子是:
此方法在iOS中未实现,因此不执行任何操作。