objective-c - 使用 NSPredicate 过滤 NSFileManger 内容以获取文件 'patterns' 的列表

标签 objective-c cocoa nspredicate nsfilemanager

我有一个字符串数组用作“过滤器”:

@[@"*.png", @".DS_Store", @"Foobar", @".jpg"]

如何使用上面的模式使用 NSPredicate 过滤掉文件夹的所有内容?

这是我到目前为止所得到的:

NSArray *contents = [fileManager contentsOfDirectoryAtPath:fullPath error:NULL];
NSArray *filter = @[@"*.png", @".DS_Store", @"Foobar", @".jpg"];
NSArray *contents = [contents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"((pathExtension IN[cd] %@) OR (lastPathComponent IN[cd] %@)) ", filter, filter]];

但这并没有给我我想要的结果。例如 png 文件不会被过滤。另外,我无法使其不区分大小写,因此 foobar 不会被过滤掉。

最佳答案

看看Predicate Programming Guide

NSArray *contents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/Users/new/Desktop/" error:nil];
NSArray *extensions = [NSArray arrayWithObjects:@"jpg", @"png",nil];
NSArray *files = [contents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(pathExtension IN %@) AND !(self LIKE[c] %@)", extensions, @"Foobar"]];
//[c] for case insensitive

关于objective-c - 使用 NSPredicate 过滤 NSFileManger 内容以获取文件 'patterns' 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17917251/

相关文章:

objective-c - 为什么我的 NSBezierPath 没有显示?

objective-c - 使用 NSPredicateEditor 编辑 NSPredicate

objective-c - NSDatePicker 格式化程序

swift - swift 中的 NSPredicate 用于空字符串

Swift 忽略 block 签名中定义的参数类型

iphone - 使用 Xcode 从 iPhone 项目到 iPad 项目

ios: mapkit 如何在 map 上启用当前位置按钮?

objective-c - SiriKit:使用多个电话号码调用联系人

objective-c - Cocoa 自动布局和调整 subview 的大小

macos - 列出可以打开文件的潜在应用程序