问题标签 [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 投票
1 回答
1050 浏览

macos - fslogger:ioctl 错误:错误地址

我正在使用这个 fslogger.c 在我的 Mac 中获取文件系统通知。但它仅适用于 Leopard 和 SnowLeopard,不适用于 Lion 或 Mountain Lion。

http://osxbook.com/software/fslogger/download/fslogger.c

当尝试使用 ioctl 克隆 /dev/fsevents 时,它返回错误号 14(错误地址)。我已经尝试修复它,我认为这可能是 ioctl 函数参数中的一些问题。所以我尝试修改它,但根本没有用。我根本无法解决这个问题。任何想法如何使它适用于狮子和山狮。

0 投票
2 回答
800 浏览

c++ - 是否可以从 FSEvent id 获取文件名?

我已经使用 mac 文件系统事件 API 在 C++ 中创建了一个简单的文件系统观察程序,如下所述:apple developer doc。我的问题在标题中。我如何获得被改变的东西的路径?eventPaths 数组只为我提供了我实际上正在观看的父目录(或其集合)的路径。但不是被修改的基础目录条目。

我可以使用回调获取有用的信息,即:

我在想也许可以从这些项目之一中提取名称?

编辑:

例如,可能会发现创建了一个文件,在这种情况下

kFSEventStreamEventFlagItemCreated

被提出。但是我应该如何获取该项目的实际名称?(对于其他事件也是如此,例如删除项目时等)。

编辑2:

我开始认为不可能做我想做的事。来自FS 技术概述

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

阿卡。臭虫。

干杯,

本。

0 投票
1 回答
185 浏览

ruby - MacRuby中的FSEvents:执行错误的回调

我正在 MacRuby 中开发 GUI 应用程序,我需要使用 FSEvents。我正在为不同的目录注册几个流。这些目录中的任何一个更改都会导致运行回调,但有一个大问题:无论哪个目录更改,都会执行最后一次注册的回调。

下面是独立的测试脚本:

当我运行它并开始修改这些目录时:

输出是:

我更希望的是:

也许我可以通过上下文参数提供我需要的数据来解决这个问题(因为检查paths回调内部会显示实际更改的目录),但是,当前的行为对我来说是完全出乎意料的。

我正在使用 OS X 10.8.2 (12C60) 和 MacRuby 0.12 (ruby 1.9.2) [universal-darwin10.0, x86_64]。

0 投票
1 回答
714 浏览

ruby - OSX RoR Guard 无法自动运行某些文件的文件更新

我非常困惑..(也很沮丧..)

出于某种原因,guard 没有检测 osx 上的文件更新,而只是检测某些文件。这几乎就像 watch 函数中定义的正则表达式不起作用或什么的..

我已经创建了一个全新的 Rails 应用程序,用于在 Ryans 防护 railscast 之后摆弄——http ://railscasts.com/episodes/264-guard

并具有生成的默认保护文件;

看起来像这样;

如果我在规范目录中编辑 application_controller.rb 或规范文件,守卫将自动运行就好了。

但是,如果我编辑并保存任何其他控制器,则什么也不会发生。

我两者都跑后卫guardbundle exec guard没有区别;它只运行一次完整的套件,然后在提示时坐在那里。

macbook pro 操作系统 v10.6.8。
带有 Ruby-1.9.3-p286 和 Rails 3.2.8 rb-fsevent 0.9.2 的 RVM

我的一位同事正在运行具有相同系统规格(公司发行的 mbp)直接从 git 中提取的完全相同的东西,并且它适用于他。

当他编辑app/home_controller.rb并只给它额外的一行或其他东西时,点击保存..测试触发。

当我编辑文件并点击保存时,没有任何反应,但如果我编辑app/application_controller.rb它会触发..

我很困惑..我很沮丧..我需要帮助,因为我不知所措..

想法?

0 投票
0 回答
1178 浏览

macos - OSX FSEvent API 和跟踪多个重命名事件

有一个讨论是连续的FSEventStreamEventId可用于检测kFSEventStreamEventFlagItemRenamed事件的旧名称和新名称。这似乎在我对基本重命名案例的测试中起作用。但是,这似乎在以下情况下被打破:

  • 监视目录test_dir的事件
  • 文件A存在于test_dir
  • 从 bash 终端发出命令mv AB;touch C;mv CA in test_dir

这会导致以下事件:

事件位 0x10800 =“文件重命名”和 0x10900 =“文件创建/重命名”

(来自 FSEvents.h)

在这种情况下,似乎将A重命名为B的事实丢失了。

我希望看到像 A 的 60095817 10800 这样的事件。

任何人都可以确认这种行为吗?如果是这样,是否有人对如何处理此限制有任何想法,而无需维护目录内容的单独表示并重新扫描/比较整个目录?

我正在 OS X 10.8.2 上进行测试。

编辑:刚刚发现另一个讨论表明这可能是一个更普遍的问题,有多个重命名。

0 投票
2 回答
785 浏览

macos - FSEventStream:kFSEventStreamCreateFlagIgnoreSelf 标志有什么作用?

我正在使用 OSX FSEventStream 监视特定目录中的文件系统更改。我在这里查看文档,发现描述了一个有趣的标志,kFSEventStreamCreateFlagIgnoreSelf。

根据使用此标志的文档,FSEvents 框架不会通知您“由当前进程触发的事件”。

这听起来很棒。这正是我想要的,但在实践中我发现我仍然会得到一些由当前进程触发的事件。

在我有限的测试中,如果监控过程创建一个新文件,或者重命名现有文件,一个事件仍然会被触发。虽然至少对现有文件的某些修改不会触发事件。

根据有限的文档(和标志的名称),我不希望当前进程触发任何事件。

所以我的问题有两个: - 这是预期的行为吗?我担心如果我指望它存在的行为,它可能是无意的,并且将来它可能会从我下面改变。

第二:——如果是,有谁知道在使用这个标志时我可以期望哪些事件仍然被传递。

0 投票
1 回答
799 浏览

fsevents - 是否有明确的 FSEvents 事件标志列表?

我一直在寻找,但找不到明确的清单。我正在记录某些事件,但我不确定它们是什么——如果有一个查找表能够更清楚地看到正在发生的事情,这将非常有用。

0 投票
1 回答
272 浏览

objective-c - 文件系统事件 API 导致 Finder 锁定?

我正在使用 Apple 的文件系统事件 API 来监视目录层次结构。我基本上是在逐字使用Apple 文档中的示例,所以除非有人要求,否则我不会发布我的代码。我的回调将修改后的路径添加到在后台处理的队列中NSOperationQueue

就我的应用程序而言,一切正常。它获取所有预期的事件,处理它们,然后重新开始工作。

另一方面,Finder 在我的应用程序运行时翻转。它是持续 10-15 秒的死亡旋转轮(它们之间有正常行为)。当我的应用程序退出时,或者我注释掉对 的调用时FSEventStreamStart,Finder 就可以了。

一个潜在的复杂情况是我正在监视的目录位于 Dropbox 下,因此我假设 Dropbox 守护程序也在以类似的方式监视该目录。我是否以某种方式干扰了它的行为?

我怎么知道这里发生了什么?

0 投票
1 回答
317 浏览

cocoa - 可可文件-/目录监视库可用吗?

我知道有 FSEvents Api 和一些 Spotlight API 来创建文件/目录观察程序。我也知道有一些像 CDEvents 这样的 FSEvents 的 ObjC 包装器,但是是否有一个完整的 Cocoa 库用于文件/文件夹监视?我不敢相信每个人都使用那些非常好的包装器创建了自己的 Filewatcher。这意味着每个人都一遍又一遍地做同样的工作?!我正在寻找一个库,它可以判断目录中是否发生了变化以及发生了什么变化,据我所知,FSEvents 的更精细粒度仅在 10.8 中有效?

亲切的问候

0 投票
1 回答
998 浏览

objective-c - FSEvents - 找出目标目录中发生的变化

我只是设置了一个FSEvent以监视目标文件夹的状态。它工作得很好,因为每次发生更改时都会通知我,并且我还会获得发生更改的子目录的路径。但是,如果我想了解执行的操作是什么?是否添加、修改、重命名或删除了文件?

在 Mac 开发人员库中,我通过使用持久事件来阅读

“即使您的应用程序未运行,您也可以找出哪些文件已被修改。这可以大大简化备份修改文件、检查多文件项目中更改的依赖项等任务。”

但如果我理解得很好,这只是将目录的当前状态与事件 ID 定义的前一个状态进行比较的一种方式。因此,我只会获得发生更改的子目录的路径。

我的问题是:我真的必须通过创建Directory Hierarchy Snapshots并稍后比较它们来“手动”在不同时间拍摄目录状态的快照,以便找出在快照之间执行的操作是什么?没有更快的方法吗?