OSX:如何访问 NSFileManager 方法 contentsOfDirectoryAtUrl 中的属性:

Posted

技术标签:

【中文标题】OSX:如何访问 NSFileManager 方法 contentsOfDirectoryAtUrl 中的属性:【英文标题】:OSX: how to access to properties in NSFileManager method contentsOfDirectoryAtUrl: 【发布时间】:2013-08-13 05:38:25 【问题描述】:

我不知道如何访问我在 NSFileManager 方法中提到的属性(我的意思是我们在此方法的 includingPropertiesForKeys: 部分中作为 NSArray 询问的文件属性):

-(NSArray *)contentsOfDirectoryAtURL:<#(NSURL *)#> 
          includingPropertiesForKeys:<#(NSArray *)#> 
                             options:<#(NSDirectoryEnumerationOptions)#> 
                               error:<#(NSError *__autoreleasing *)#>

我得到一个 NSArray 对象,其中包含一个文件的 NSURL 对象数组。

所以,我不能只获取这些属性(我只是不知道如何)。

我必须使用这个构造来获取这些属性:

NSArray *arrayOfNSURLs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:myFolderURL
                              includingPropertiesForKeys:@[NSURLContentModificationDateKey, NSURLVolumeIdentifierKey, NSURLLocalizedNameKey,NSURLLocalizedTypeDescriptionKey]
                                                 options:NSDirectoryEnumerationSkipsHiddenFiles
                                                   error:nil];

// I will call all below this 'second part'

id test;
for (id file in arrayOfNSURLs) 
    if ([file isKindOfClass:[NSURL class]]) 
        [file getResourceValue:&test forKey:NSURLContentModificationDateKey error:nil];

        NSLog(@"%@ %@",file ,test);

    


如你所见,我必须使用 NSURL 方法getResourceValue:forKey:error:。但是等一下,我在NSFileManager 方法contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error: 中提到这个键,在includingPropertiesForKeys: 部分???

我尝试将nil 作为...includingPropertiesForKeys: 部分的参数,添加键数组和nil 没有区别,“第二部分”无论如何都会给你内容修改键。

所以,我的问题很简单:为什么在contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error: 方法中需要属性作为键参数? 有没有办法在我的代码中没有第二部分的情况下检索此键中提到的信息?

谢谢。

【问题讨论】:

【参考方案1】:

contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error: 中键的目的是,根据文档:“键数组告诉枚举器对象预取和缓存每个项目的信息。预取此信息通过触摸磁盘提高效率只有一次”。

您仍然需要使用 getResourceValue:forKey:error: 来获取这些值,但是这些值现在存储在 NSURL 对象本身中,因此您无需再次访问磁盘来获取它们。

【讨论】:

以上是关于OSX:如何访问 NSFileManager 方法 contentsOfDirectoryAtUrl 中的属性:的主要内容,如果未能解决你的问题,请参考以下文章

OSX:以编程方式将文件从垃圾箱移动到其先前的位置

使用 NSFileManager 访问 mac 共享上的文件

如何在 OS X 上获取可移动卷的 NSURL 并在安装时发出通知?

访问 iPhone 模拟器根目录和主目录

Foundation框架中的NSFileManager一

NSFileManager 错误?