Objective c 如何在mac的主目录中搜索具有特定扩展名的文件?

Objective c 如何在mac的主目录中搜索具有特定扩展名的文件?,objective-c,macos,cocoa,nsfilemanager,nshomedirectory,Objective C,Macos,Cocoa,Nsfilemanager,Nshomedirectory,我想在mac目录中搜索文件扩展名为doc的文件,就像我们使用search命令从finder中查找文件一样 我正在使用下面的代码进行此搜索。但它只从下载目录中搜索。它不是从文档(查找器的文档目录,而不是应用程序)、桌面或主目录中的任何其他目录进行搜索 NSString *docsDir = NSHomeDirectory(); NSFileManager *localFileManager=[[NSFileManager alloc] init]; NSDirectoryEnumerator *d

我想在mac目录中搜索文件扩展名为doc的文件,就像我们使用search命令从finder中查找文件一样

我正在使用下面的代码进行此搜索。但它只从下载目录中搜索。它不是从文档(查找器的文档目录,而不是应用程序)、桌面或主目录中的任何其他目录进行搜索

NSString *docsDir = NSHomeDirectory();
NSFileManager *localFileManager=[[NSFileManager alloc] init];
NSDirectoryEnumerator *dirEnum =
    [localFileManager enumeratorAtPath:docsDir];

NSString *file;
while ((file = [dirEnum nextObject])) {
    strPath = [NSString stringWithFormat:@"%@/",NSHomeDirectory()];

    strPath = [strPath stringByAppendingString:file];
    NSLog(@"%@",strPath);

    NSArray *dirFiles = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:strPath error:nil];
    NSArray *pdfFiles = [dirFiles filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.pdf'"]];

    NSLog(@"%@",pdfFiles);
}
我已经试着改变了通往成功的道路

NSString *docsDir = [NSString stringWithFormat:@"/Users/%@/",NSUserName()];

但是,同样的事情还是发生了


我想在所有目录中搜索具有特定扩展名的文件,就像我们正在从finder中搜索一样,如下图所示。

您的应用程序是否已沙盒化(您可以通过选择项目和功能进行检查)

我已经在沙盒应用程序中运行了您的代码,在沙盒应用程序中它不工作,在非沙盒应用程序中它运行良好

为什么它不在沙盒应用程序中运行

  • 从沙盒应用程序中,规则是您无法访问桌面等内容

  • 从沙盒应用程序中,您可以访问下载目录

但是

EnumeratorPath:不遍历链接-在Library/../Data目录中,从NSHomeDirectory()获取的文档中,Downloads是一个链接,因此您只能访问下载文件夹的第一级

  • @“/Users/%@/”,NSUserName()将为您提供“真实”的用户文档目录,但由于您的应用程序是沙盒,因此不允许您通过它进行枚举

看起来我的假设似乎可以解释你观察到的几乎所有症状。

要像Finder一样搜索,请使用MSMetadataQuery。这就是聚光灯背后的技术:

至于沙箱,MetadataQuery返回结果,然后您必须请求用户允许读取这些文件

NSString *docsDir = NSHomeDirectory();