我正在编写一个小型macOS应用程序,希望在其中查看文件夹中的更改。它不需要监视子文件夹,我只想在文件添加到文件夹或删除文件时收到通知。

看起来NSFileCoordinator和/或NSFilePresenter可以用于实现此目的,但是我无法理解如何使用它们来实现此目的。

理想情况下,无需包含第三方框架即可解决此问题。

最佳答案

您可以使用NSFilePresenter进行此操作。
观察类必须符合NSFilePresenter,如下所示。
presentItemURL将指向您要观察的文件夹。
如果文件夹presentedSubitemDidChangeAtURL中有更改,则将调用它。下面的代码可以使您了解其工作方式。

class ObservingClass: NSObject, NSFilePresenter {

    lazy var presentedItemOperationQueue = NSOperationQueue.mainQueue()
    var presentedItemURL:NSURL?


    func presentedSubitemDidChangeAtURL(url: NSURL) {
        let pathExtension = url.pathExtension
        if pathExtension == "png"{
            refreshImages()
        }
    }

   func refreshImages(){
        let path = snapshotPath
        var isDirectory: ObjCBool = ObjCBool(false)

        if NSFileManager.defaultManager().fileExistsAtPath(path!, isDirectory: &isDirectory){
            if isDirectory{
                do {
                    let list = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(path!) as Array<String>
                    for filePath in list {
                        if filePath.hasSuffix(".png"){
                            if let snapshot = snapshotAtPath(path! + "/" + filePath){
                                newSnapshotArray += [snapshot]
                            }
                        }
                    }
                } catch {
                    // error handling
                }
            }
        }
    }
}
最良好的祝愿。

关于swift - Swift/ cocoa : How to watch folder for changes?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50439658/

10-10 20:30