代码之家  ›  专栏  ›  技术社区  ›  eivindml

Swift/Cocoa:如何查看文件夹中的更改?

  •  3
  • eivindml  · 技术社区  · 6 年前

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

    看起来像 NSFileCoordinator 和/或 NSFilePresenter 可以用来实现这一点,但我无法理解如何使用它们来实现这一点。

    理想情况下,这可以在不包括第三方框架的情况下解决。

    1 回复  |  直到 6 年前
        1
  •  5
  •   Marc T.    6 年前

    您可以使用nsfilepresenter来完成此操作。 观察类必须符合nsvillepresenter,如下所示。

    presenteditemul将指向您要观察的文件夹。 如果文件夹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 
                    }
    
                }
            }
    
        }
    
    }
    

    最美好的祝福。

    推荐文章