gpt4 book ai didi

iphone - 在 Cocoa/Cocoa Touch 中监控一个目录

转载 作者:可可西里 更新时间:2023-11-01 03:12:03 24 4
gpt4 key购买 nike

我正在尝试找到一种方法来监视目录内容的更改。我尝试了两种方法。

  1. 使用kqueue监控目录
  2. 使用GCD监控目录

我遇到的问题是我找不到检测哪个文件已更改的方法。我正在尝试监视一个可能包含数千个文件的目录,我不想对每个文件都调用 stat 来找出哪些文件发生了变化。我也不想为该目录中的每个文件设置单独的调度源。这目前可能吗?

注意:我用 kqueue 记录了我的实验监控文件和 GCD

最佳答案

我的建议是硬着头皮在另一个线程中进行目录扫描,即使您正在谈论数千个文件。但如果你坚持,这里就是答案:

如果不卷起袖子去内核潜水,就无法做到这一点。

您的第一个选择是使用 FSEvents 框架,它会在创建、编辑或删除文件(以及与属性有关的事情)时发出通知。 Overview是here,有人围绕API写了一个Objective C wrapper,虽然我没试过。但是概述没有提到有关文件 更改的事件的部分,只是提到了目录(比如 kqueue)。我最终使用 here 中的代码和头文件 here 来编译我自己的记录器,我可以用它来获取单个文件级别的事件。您必须在应用中编写一些代码才能在后台运行记录器并对其进行监控。

或者,查看“fs_usage”命令,它持续监控所有文件系统事件(我的意思是所有)。 Darwin 已经自带了,所以你不必自己编译。您可以使用 kqueue 来监听目录更改,同时监视“fs_usage”的输出。如果您从 kqueue 收到一个目录已更改的通知,您可以查看 fs_usage 的输出,查看写入了哪些文件,并根据修改的目录检查文件名。 fs_usage 是一个消防水管,因此请准备好使用一些选项和 Grep 来驯服它。

为了让事情变得更有趣,你的 FSEvents 记录器和 fs_usage 都需要 root 访问权限,所以你必须先获得用户的授权,然后才能在你的 OS X 应用程序中使用它们(查看 Authorization Services Programming Guide 了解如何做到这一点)。

如果这一切听起来非常复杂,那是因为它确实如此。但至少您不必费力地找出答案!

关于iphone - 在 Cocoa/Cocoa Touch 中监控一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com