我正在编写一个小型的macOS应用程序,在那里我希望能够看到一个文件夹的变化。它不需要查看子文件夹,我只想收到一个通知,如果一个文件被添加到文件夹或删除。
看起来可以使用NSFileCoordinator和/或NSFilePresenter来实现这一点,但我无法理解如何使用它们来实现这一目标。
理想情况下,无需包含第三方框架就可以解决这一问题。
发布于 2018-05-21 07:16:24
您可以使用NSFilePresenter来完成这个任务。观察类必须符合NSFilePresenter,如下所示。
presentedItemURL将指向要观察的文件夹。如果文件夹中有更改,请调用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
}
}
}
}
}谨致问候。
发布于 2020-05-04 21:07:10
马克·T的答案仍然有效,似乎是解决这一问题的最简单方法。
为了使其工作,我需要添加以下行(可以在ObservingClass的init()处):
NSFileCoordinator.addFilePresenter(self)https://stackoverflow.com/questions/50439658
复制相似问题