问题标签 [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 回答
329 浏览

ruby-on-rails - “gem install autotest-fsevent”-v 0.1.1 在雪豹上失败

遵循 Michael Hartl 的 Rails 2.3 教程。很好,到目前为止,但我被困在第 87 页上的测试环境准备工作中。无法安装 autotest-fsevent。

iMac i7 运行雪豹。

在上面的标题中键入命令,我收到以下错误消息:

bash-3.2$ sudo gem install autotest-fsevent -v 0.1.1 构建原生扩展。这可能需要一段时间... 错误:安装 autotest-fsevent 时出错:错误:无法构建 gem 原生扩展。

mkmf.rb在 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h 找不到 ruby​​ 的头文件

Gem 文件将继续安装在 /Library/Ruby/Gems/1.8/gems/sys-uname-0.8.6 中以供检查。结果记录到 /Library/Ruby/Gems/1.8/gems/sys-uname-0.8.6/ext/gem_make.out

我尝试下载 ruby​​ 1.8.7 全新安装来获取头文件,但这似乎不起作用。将它们复制到上面的粗体路径。

任何帮助将不胜感激。

-劳埃德

0 投票
2 回答
1562 浏览

python - 使用 vim 写入文件不会在 OS X 上触发文件更改事件

我正在使用看门狗来监视 OS X 上的 .less 文件更改事件。如果我使用 TextMate 或 Sublime Text 更改 .less 文件的内容,则会捕获修改事件。但是,如果我使用 vim 编辑内容,则不会触发文件修改事件(但会捕获使用 vim 创建的文件的文件创建事件)。我已经看到了 FSEvents 和 kqueue 的相同行为(我对这两者的了解几乎为零)。

我想知道有人可以解释这种行为吗?

0 投票
1 回答
2524 浏览

objective-c - 使用 FSEventStreamCreate 创建的流为零

我想创建一个简单的事件流,以便在目录中发生某些更改时监听事件。第一步是创建流,但我在使用 FSEventStreamCreate 函数创建时收到错误。谷歌搜索这个错误是没有用的,我不明白错误在哪里。

我的代码与苹果文档中的代码非常相似

无论如何,这是我的代码:

0 投票
0 回答
621 浏览

macos - Mac OS X 如何以编程方式检测更改的文件是否仍在被更改文件的同一进程“使用”?

我正在调查我们开发的实用程序的问题。我们跟踪文件或目录,并在发生更改时将新版本上传到中央存储库。我们的实用程序类似于 Dropbox,因为您可以跟踪更改,但它更多的是版本跟踪器而不是同步实用程序。

我们可以检测文件何时被更改。但我们希望能够检测做出更改的过程是否仍在“使用”它……因为没有更好的术语。

当用户在某些程序中打开文件并定期点击保存时,就会出现此问题。或者,最糟糕的是,自动保存功能每隔几分钟保存一次正在进行的工作。我们希望能够检测到这一点并仅在需要时保存,例如当用户最终保存并关闭文件时。如果一个具有自动保存功能的程序整夜打开,我们最终会得到数百个相同文件的无用版本。

  1. 是否可以检测到哪个进程保存了文件?
  2. 是否可以检测该进程是否仍在“使用”该文件。

这在 Windows 中很简单,但在 Mac 中却非常复杂。此外,我们是 windows 和 ios 开发人员,对 OS X 不是那么专业,尤其是当它变成 linuxy 时。

0 投票
3 回答
1945 浏览

cocoa - Cocoa、FSEvents、kFSEventStreamCreateFlagFileEvents 标志和“重命名”事件

我一直在玩我FSEvents的一个小应用程序,以将我的应用程序的内容与硬盘驱动器上的内容同步(基本上,它是一个小图像查看器,我希望它的内容在 HDD 的内容发生变化时更新)

我使用该标志创建我的流kFSEventStreamCreateFlagFileEvents,但我很难弄清楚这些事件是如何由操作系统(或内核或其他)生成的,不幸的是,没有使用此标志生成的事件的文档......它似乎它们是 10.7 的新功能,但仍未记录在案。

所以,我的主要问题是“重命名”。当我进行简单的重命名时,会向我的回调发送 2 个 kFSEventStreamEventFlagItemRenamed 事件。一个包含旧文件名,第二个包含新文件名。当您重命名一批文件时会出现问题,这些事件可能不是连续的。例如,它是以下情况:

  1. “file1”->“new_file_1”
  2. “file2”->“new_file_2”

我可能会按以下顺序接收事件:

  1. “重命名”/“文件 1”
  2. “重命名”/“文件 2”
  3. “重命名”/“new_file_1”
  4. “重命名”/“new_file_2”

当您捕获第二个重命名事件时,似乎没有任何方法可以获取第一个重命名事件的 id ......所以我所做的是:当接收到“重命名”事件时,我使用 stat()文件名。如果stat返回成功,则表示它是新的文件名。如果不是,则说明它是旧的。我仍然无法链接这两个事件,但至少我可以通过删除旧文件并添加新文件来解决问题。

所以,我基本上有两个问题:

第一个是:我是不是完全失明了,没有看到通过 fsevents 正确捕捉“重命名”事件的明显方法?

第二个 i:我有时会遇到一个奇怪的错误,不是只发送 2 个重命名的事件,而是发送了 3 个!所以我得到一个文件添加了两次......我不确定这是否是一个错误,或者这是否来自我完全错过了使用带有kFSEventStreamCreateFlagFileEvents标志的 fsevent API 的事实......

欢迎任何帮助,我完全没有想法来解决这个问题!

0 投票
2 回答
5072 浏览

cocoa - 如何在可可中获取文件夹更改通知(文件夹监视程序)

我是 Cocoa 应用程序开发的新手。我希望在修改给定目录下的任何文件时通知我的应用程序(文件夹观察程序)。修改意味着删除,添加,文件内容被改变。我也尝试使用 FSEvents 并使用 NSWorkspace 的通知中心或在http://www.zathras.de/angelweb/sourcecode.htm#UKKQueue中的 UKKQueue 中委托消息。当目录下的任何文件被修改时,我的应用程序会收到通知。但问题是它没有给出被修改的特定文件的名称或路径。它给出了目录的路径,但没有给出特定文件的路径。

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

0 投票
3 回答
592 浏览

objective-c - 如何使用可可确定文件复制是否完成

我正在使用 Foundation 框架和 FSEvents API 在 XCode 中为 MAC 开发文件夹观察程序。在打开文件进行其他操作之前,我需要知道文件是否已完全复制到目的地。有什么办法知道吗?请指教

0 投票
1 回答
1151 浏览

macos - 无论事件流创建选项如何,都会设置 FSEvents 文件标志

根据Apple 文档,在回调中FSEvents

但是,我三重检查了kFSEventStreamCreateFlagFileEvents调用时没有设置标志

但无论我做什么,当事件从APIkFSEventStreamEventFlagItem*传递给我时,标志仍在设置中。FSEvents我怀疑这是一个错误,但我不太确定。我正在使用 OS X Lion 10.7.2

示例代码可以在这里找到。http://stuconnolly.com/downloads/scevents/

编辑

问题是:
有没有其他人经历过同样的结果?
这是我可以用来检查文件事件标志的行为吗?

0 投票
1 回答
1784 浏览

gem - 无法使用 Xcode 4.3 安装 autotest-fsevent gem

更新到 Xcode 4.3(删除旧版本的 Xcode)后,我无法安装 autotest-fsevent gem。命令行工具是通过 Preferences > Downloads > Components 选项卡安装的。

osx 10.7.3、rvm 1.10.2、ruby 1.9.3-rc1、捆绑器 1.0.22

自述文件只是表明需要 Xcode。

我似乎选择了正确的 Xcode.app:

其他人有这个问题吗?任何想法如何解决这个问题?

0 投票
1 回答
4368 浏览

python - 看门狗(osx)未通知远程网络更改

我正在使用看门狗来监视网络目录,非递归的,以便随着时间的推移创建特定的文件模式。我看到的问题是,虽然我在本地测试时效果很好,但如果我从远程机器更改受监控的目录,则不会触发事件。

以下是我的配置的具体细节:

  • 操作系统
  • 在 NFS 挂载上监视单个目录,非递归
  • 蟒蛇2.6

使用股票示例片段可以轻松复制我的问题示例:

如果您在网络目录上启动它,然后从同一系统进行更改,则会调度事件。但是,如果您随后从网络上的另一台计算机更改目录,则不会调度任何事件。

我是否遗漏了有关 kqueue 限制的某些内容(或者可能是 OSX 上的 FSEvents,因为它说它首先是 Watchdog 的首选)?

我对这个 python 包很感兴趣,并打算开始将它用于其他脚本来替换文件系统轮询,但我似乎找不到任何关于我为什么看到这个问题的信息。

更新

我还测试了MacFSEvents并遇到了同样的问题。然后我修改了上面的测试脚本,强制尝试不同的观察者:

所以至少现在,我可以使用投票观察者,而不必修改我的代码,直到有人可以阐明我遇到的真正问题。