获取目录中的文件(及其属性)

nac*_*o4d 6 iphone cocoa-touch objective-c

我想得到一个目录中的文件列表,但我需要知道该文件是否是一个目录,上次修改时,以及其名称:).所以我尝试了这个:

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);
}
Run Code Online (Sandbox Code Playgroud)

但是我总是得到(null) (null) (null),没有错误但没有数据;(

我想知道这里有什么问题?

PS:我知道的contentsOfDirectoryAtPath:error:attributesOfItemAtPath:error:,但我认为这是不这样做的最好办法,是吗?我打算在包含大量文件的文件夹中使用它,所以我想以最有效的方式执行此操作.

编辑iOS5及更高版本

正如@jeremyP指出的那样,根据文档,该方法在iOS4中未实现,但是从iOS5及更高版本开始,它似乎正常工作:

可用性适用
于iOS 5.0及更高版本.(符号出现在iOS 4中,但不执行任何操作.)

这个问题是在我认为iOS4是最新版本时完成的.现在在iOS 5和6中一切都按预期工作:)

Jer*_*myP 7

这不是您的问题的答案,但您的错误检查应如下所示:

if (![url getResourceValue:&name forKey:NSURLNameKey error:&error])
{
    NSLog(@"name: %@", [error localizedDescription]);error = nil;
}
Run Code Online (Sandbox Code Playgroud)

编辑

无法弄清问题是什么,但刚刚重新阅读该方法的文档.正在讨论的重要句子是:

此方法在iOS中未实现,因此不执行任何操作.

  • 只需从文档中添加一些重要信息:`在iOS 5.0及更高版本中可用.(符号出现在iOS 4中,但不执行任何操作.)`这个问题是在我认为iOS4是最新版本时完成的.现在在iOS 5和6中一切都按预期工作:) (3认同)