如何在OS X中通过字符串查询搜索文件/文件夹?

时间:2019-05-24 13:30:40

标签: swift macos cocoa

就像Finder,您给它一个字符串查询,它返回带有匹配字符串的文件列表,我不想使用另一种方法来获取目录中的所有文件,然后逐个迭代以提高性能。问题。

我看着FileManager,但是没有那样的东西。

1 个答案:

答案 0 :(得分:0)

感谢@vadian,我得到了一个提示:

谷歌搜索后实施该方法,希望对您有用。

注意:此方法使用Spotlight搜索,该搜索可以比传统方法更快,但仅限于非系统目录和索引目录。

设置谓词和路径后,您将侦听在结束收集结果时触发的通知。

func getFiles(in paths: [String], query: String) {
    let queryMeta = NSMetadataQuery()
    let nf = NotificationCenter.default
    nf.addObserver(forName: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: nil, queue: operationQueue, using:{_ in
        queryMeta.disableUpdates()
        print(queryMeta.results.count)
        for item in queryMeta.results {
            if let itemMeta = item as? NSMetadataItem, let name = itemMeta.value(forAttribute: NSMetadataItemPathKey) {
                print(name)
            }
        }
    })
    queryMeta.searchScopes = paths
    queryMeta.predicate = NSPredicate(format: "%K CONTAINS[c] '\(query)'", NSMetadataItemFSNameKey)
    print("Starting searching for query: \(query)")
    queryMeta.start()
}