首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在可可中获取文件夹更改通知(文件夹观察器)

如何在可可中获取文件夹更改通知(文件夹观察器)
EN

Stack Overflow用户
提问于 2011-12-19 21:48:03
回答 2查看 5K关注 0票数 3

我是Cocoa应用程序开发的新手。我希望我的应用程序在给定目录下的任何文件被修改时得到通知(文件夹监视器)。Modified表示删除、添加、更改文件内容。我也尝试过使用FSEvents,使用NSWorkspace的通知中心或委托消息,就像在http://www.zathras.de/angelweb/sourcecode.htm#UKKQueue的UKKQueue中一样。当目录下的任何文件被修改时,我的应用程序都会收到通知。但问题是它没有给出被修改的特定文件的名称或路径。它提供目录的路径,但不提供特定文件的路径。

知道如何在特定文件中查看文件夹的修改吗??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-22 06:28:04

您必须编写代码来跟踪文件夹的内容,然后每当您收到文件夹内容已更改的FSEvent通知时,您需要将存储的有关文件夹内容的信息与实际的当前内容进行比较。

这可以是像一个可变数组一样简单的东西,例如folderContents,它包含一组文件属性字典。您可以使用从NSFileManager-attributesOfItemAtPath:error:方法返回的字典或其子集。

当你收到文件夹通知时,你需要做的就是遍历存储的字典,并检查是否有任何文件被添加、删除或修改。NSFileManager attributes字典包含执行此操作所需的所有信息。

然后,您需要使用更新后的信息更新您存储的有关文件夹的信息。

票数 7
EN

Stack Overflow用户

发布于 2012-08-24 03:23:02

NSMetadataQuery可以很好地监视文件夹:

代码语言:javascript
运行
复制
- (void)setupWatchedFolder {
    NSString *watchedFolder = @"/path/to/foo";

    NSMetadataQuery *query = [[NSMetadataQuery alloc] init];
    [query setSearchScopes:@[watchedFolder]];
    [query setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE '*.*'", NSMetadataItemFSNameKey]];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(queryFoundStuff:) name:NSMetadataQueryDidFinishGatheringNotification object:query];
    [nc addObserver:self selector:@selector(queryFoundStuff:) name:NSMetadataQueryDidUpdateNotification object:query];

    [query startQuery];
}

- (void)queryFoundStuff:(NSNotification *)notification {

    NSMetadataQuery *query = self.metadataQuery;
    [query disableUpdates];

    NSMutableArray *results = [NSMutableArray arrayWithCapacity:self.metadataQuery.resultCount];

    for (NSUInteger i=0; i<self.metadataQuery.resultCount; i++) {
        [results addObject:[[self.metadataQuery resultAtIndex:i] valueForAttribute:NSMetadataItemPathKey]];
    }

    // do something with you search results
    // self.results = results;

    [query enableUpdates];
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8562265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档