问题标签 [fsevents]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
12583 浏览

macos - DropBox Mac 客户端如何工作?

我一直在研究 DropBox Mac 客户端,目前正在研究为不同的服务实现类似的接口。

它们究竟是如何与 finder 这样的?我非常怀疑文件夹中表示的这些对象是每次加载时下载的实际文档?它们必须根据需要动态下载。那么如何在没有实际文件系统对象的情况下在 finder 中显示这些项目呢?

有谁知道这是如何在 Mac OS X 中实现的?

或者任何指向 Apple API 或其他与 finder 具有类似集成的开源项目的指针?

0 投票
5 回答
1452 浏览

objective-c - NSTableView -setDataSource 在由 FSEvents 触发时不起作用

所以这就是我所拥有的:

  • 带有 NSMutableArray 数据源的 NSTableView
  • FSEvents 监视包含包含表视图数据的文件的文件夹(使用SCEvents实现 Objective-C 抽象优势)
  • FSEvents 触发与 UI 中的重新加载按钮相同的功能。此函数根据所述文件的内容,使用新的数据源刷新表格视图setDataSource:

这就是发生的事情:

  • 如果我对文件进行更改,则会触发 FSEvent 并调用刷新方法。
  • 表视图应该接受的数组确实包含触发 FSEvent 的更改。
  • setDataSource:使用正确的数据源发送到 NSTableView。
  • 更改不会出现在表格视图中!

但是之后:

  • 如果我点击刷新按钮,它触发与 FSEvent 完全相同的方法,表格视图将使用新数据进行更新。

我还尝试用 NSNotification ( NSApplicationDidBecomeActiveNotification) 替换 FSEvent,但同样的事情发生了。

有人知道为什么会这样吗?

编辑:为了澄清起见,我的问题的要点是:为什么我的 NSTableView 会在按下按钮触发时重新加载,而不是在由 FSEvent 或 NSNotification 触发时重新加载?

编辑:感谢diciu,我发现实际上我的所有 UI 引用在事件触发时都指向 0x0,但在按钮单击触发时具有有效地址。这些对象都在 IB 中声明,因此在我的代码中没有对它们进行实例化或分配。所以我现在的问题是:我能做些什么来阻止这些指针指向 nil?

0 投票
3 回答
3506 浏览

macos - 如何在 Mac OSX 中检测新的或修改的文件

在 Windows 操作系统中,MS 提供了 ReadDirectoryChangesW 和 FindFirstChangeNotification API 来检测新的或修改的文件,Mac OSX 是否也提供相同的功能?

0 投票
1 回答
1934 浏览

macos - OS X Leopard 上的 FSEvents 怪异

我想监视 mac 上几个目录的文件系统事件。我要监视的目录可能会在运行时发生变化,因此使用 FSEvents 这是我的应用程序所做的:

  • 创建一个全局回调函数来处理回调
  • 为每个文件夹创建一个新的 FSEventStreamRef,将其与上面创建的回调相关联,并向 eventStream 添加一个上下文,以帮助我将更改回调与此文件夹相关联

东西似乎大部分都有效,但我注意到在调用回调和将“eventPaths”值发送到回调时有些奇怪。

例如,如果我为 /Foo 和 /Bar 创建了 StreamRefs,如果我在 /Bar 中添加一个文件,我的回调几乎会立即被调用,但 eventPaths 指向 /Foo 中的一个位置,并且我与 StreamRef 关联的上下文是也是 /Foo 的。

或者,假设我正在监视 /Foo 和 /Bar,然后删除 /Bar(通过正确停止和关闭 /Bar 的 StreamRef)。我现在为 /Fee 创建一个新的 FSEventStreamRef 并与同一个回调关联。我对 /Fee 所做的任何更改都不会导致调用回调,但对 /Foo 的更改会继续引发回调。

我在网上看到的任何示例或文档都只讨论监视单个文件夹。我如何将单个回调与多个 FSEventStreamRefs 关联起来有什么问题吗?听起来这应该不是问题……

有没有人以可靠的方式做过类似的事情,或者对我可能会尝试不同的方法有什么建议?

我在试验时尝试做的一件事是使用单个 FSEventStreamRef 并通过我想要的所有路径向它传递一个 CFArrayRef,当我的监视列表更改关闭并重新创建一个新的 FSEventStreamRef - 这更糟糕的是以上。

0 投票
6 回答
107277 浏览

c++ - 如何让我的程序监视 C++ 中的文件修改?

有很多程序,例如 Visual Studio,可以检测外部程序何时修改文件,然后在用户需要时重新加载文件。有没有一种相对简单的方法可以在 C++ 中做这种事情(不一定必须独立于平台)?

0 投票
7 回答
2964 浏览

cocoa - 等效于 Cocoa 中的 FileSystemWatcher (.NET)

我正在 Cocoa 中开发一个应用程序。我想不断检查特定位置的文件内容是否更改(例如FileSystemWatcher在.NET中)。请任何人给我一个解决方案

0 投票
1 回答
1559 浏览

cocoa - Cocoa 中的文件观察器

大家好,我正在可可中开发一个应用程序。我想不断检查特定位置的文件内容是否被更改(如 .NET 中的 FileSystemWatcher)。请任何人给我一个解决方案。我使用 FSEvent 但它仅监视文件夹以进行更改...但是我需要知道该文件夹中的文件是否已更改..请任何人帮助我......

0 投票
1 回答
476 浏览

objective-c - SCEvents 在某些方法中不起作用?

[注意:标题可能不太准确,我不知道如何表达它] 出于某种原因,NSFileHandle 的 readInBackground 不起作用,所以我求助于 SCEvents,这是一个围绕 Mac OS X 的 FSEvents API 的 Cocoa 包装器。我有一个名为“EventListener”的单独类,它处理所有 SCEvents 的东西。

它有这些方法:

(我直接从 SCEvents 示例应用程序中获得了这些方法,一旦我得到它的工作,我计划为我自己的目的改变它)

然后在我的主应用程序委托类的 applicationDidFinishLaunching 方法中,我有这个:

初始化监听器。现在,在分配它并调用 setupEventListener 类之后,一切正常。主文件夹中的更改会按原样记录到调试器控制台中。我有另一种名为 format: 的方法,它运行一些 shell 脚本。问题是,当格式化方法运行时,事件监听器停止工作。不会记录对主文件夹的任何更改。这个问题只发生在 format: 方法上。使用所有其他方法,事件侦听器工作正常。

我不确定问题是什么。谢谢

0 投票
1 回答
172 浏览

macos - 支持文件系统事件的最低 OS X 版本是多少?

我想使用 FSEvents 又名文件系统事件来监听文件夹层次结构内容的变化。在我的测试中,文件系统事件做得非常好。但是我找不到关于它是否适用于 Tiger 的信息。

有人知道吗?

0 投票
4 回答
18356 浏览

macos - Mac OS X 中的文件级文件系统更改通知

我希望在(直接或间接)给定目录下的任何文件被修改时通知我的代码。通过“修改”,我的意思是我希望在文件内容被更改、重命名或删除时通知我的代码;或者如果添加了新文件。对于我的应用程序,可能有数千个文件。

我看起来像 FSEvents,但它的技术概述部分说:

重要的一点是通知的粒度是在目录级别。它只告诉您目录中的某些内容发生了变化,但不告诉您发生了什么变化。

它还说:

文件系统事件 API 也不是为找出特定文件何时更改而设计的。对于这样的目的,kqueues 机制更为合适。

但是,为了在给定文件上使用 kqueue,必须打开文件以获取文件描述符。管理数千个文件描述符是不切实际的(而且可能会超过允许的最大打开文件描述符数)。

奇怪的是,在 Windows 下,我可以使用该ReadDirectoryChangesW()功能,它正是我想要的。

那么如何在 Mac OS X 下做我想做的事呢?或者,换一种方式问:如何ReadDirectoryChangesW()在用户空间中为 Mac OS X 编写等价物(并且这样做非常有效)?