- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在 MacRuby 中开发 GUI 应用程序,我需要使用 FSEvents。我正在为不同的目录注册几个流。任何这些目录中的更改都会导致运行回调,但存在一个大问题:无论哪个目录发生更改,都会执行最后注册的回调。
下面是独立的测试脚本:
framework 'Cocoa'
framework 'CoreServices'
class Monitor
def initialize(dir)
@dir = dir
end
def start(&block)
callback = Proc.new do |stream, context, count, paths, flags, ids|
p @dir
block.call
end
flags = KFSEventStreamCreateFlagUseCFTypes
@stream = FSEventStreamCreate(KCFAllocatorDefault, callback, nil, [@dir], KFSEventStreamEventIdSinceNow, 0.0, flags)
FSEventStreamScheduleWithRunLoop(@stream, CFRunLoopGetCurrent(), KCFRunLoopDefaultMode)
FSEventStreamStart(@stream)
end
end
Monitor.new(Dir.pwd + "/dir1").start { p "dir1" }
Monitor.new(Dir.pwd + "/dir2").start { p "dir2" }
Monitor.new(Dir.pwd + "/dir3").start { p "dir3" }
app = NSApplication.sharedApplication
app.run
当我运行它并开始修改这些目录时:
~/tmp/fsevents $ touch dir1/test
~/tmp/fsevents $ touch dir2/test
~/tmp/fsevents $ touch dir3/test
输出是:
"/Users/janek/tmp/fsevents/dir3"
"dir3"
"/Users/janek/tmp/fsevents/dir3"
"dir3"
"/Users/janek/tmp/fsevents/dir3"
"dir3"
我更希望的是:
"/Users/janek/tmp/fsevents/dir1"
"dir1"
"/Users/janek/tmp/fsevents/dir2"
"dir2"
"/Users/janek/tmp/fsevents/dir3"
"dir3"
也许我可以通过上下文参数提供我需要的数据来解决这个问题(因为在回调中检查 paths
会显示实际更改的目录),但是,当前的行为仍然是我完全出乎意料的.
我使用的是 OS X 10.8.2 (12C60) 和 MacRuby 0.12 (ruby 1.9.2) [universal-darwin10.0, x86_64]。
最佳答案
是的,这真的很奇怪。我也有这种行为。似乎总是调用最新注册的回调。但从好的方面来说,从第四个参数到回调,有可能获得实际调用的目录的路径。我不得不使用这样的结构。
我不是 ruby 爱好者,但这段代码适合我。
framework 'Cocoa'
framework 'CoreServices'
class Monitor
@@registry = {}
def self.register(dir, other_data)
@@registry[dir] = other_data
end
def initialize(dir, other_data)
@dir = dir
self.class.register(dir, other_data)
callback = Proc.new do |stream, context, count, paths, flags, ids|
paths.cast!('*')
p "the callback that triggered has closure variable @dir=#{@dir}"
p "but the actual callback said the dir was #{paths[0]}"
p "the metadata that I stored associated with that directory is #{@@registry[paths[0]]}"
end
@stream = FSEventStreamCreate(KCFAllocatorDefault, callback, nil, [@dir], KFSEventStreamEventIdSinceNow, 0.0, 0)
FSEventStreamScheduleWithRunLoop(@stream, CFRunLoopGetCurrent(), KCFRunLoopDefaultMode)
FSEventStreamStart(@stream)
end
end
Monitor.new(Dir.pwd + "/dir1/", 'dir1 data')
Monitor.new(Dir.pwd + "/dir2/", 'dir2 data')
Monitor.new(Dir.pwd + "/dir3/", 'dir3 data')
app = NSApplication.sharedApplication
app.run
这是我看到的输出:
rmcgibbo@Roberts-MacBook-Pro-2 ~/local/fsync
$ macruby fsevents.rb &
[1] 14638
rmcgibbo@Roberts-MacBook-Pro-2 ~/local/fsync
$ touch dir1/mao
rmcgibbo@Roberts-MacBook-Pro-2 ~/local/fsync
$ "the callback that triggered has closure variable @dir=/Users/rmcgibbo/local/fsync/dir3/"
"but the actual callback said the dir was /Users/rmcgibbo/local/fsync/dir1/"
"the metadata that I stored associated with that directory is dir1 data"
关于ruby - MacRuby 中的 FSEvents : wrong callback is executed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13103341/
我正在查看有关 FSEvents 的苹果开发人员文档,但后来在 dropbox 论坛中,我发现了这个 https://forums.dropbox.com/topic.php?id=20771 , “
这是我得到的: $ sudo gem install autotest-fsevent Password: Building native extensions. This could take a
我正在尝试让 webpack 在 Visual Studio 中工作,但不断出现 Dependencies - not installed 问题。我在输出中收到此错误: npm WARN option
我正在使用 FSEvents 来监视将有一些大文件复制到其中的文件目录。目前 FSEvents 似乎在我开始复制文件时发出通知,并在完成复制文件时再次发出通知。但是,当它是一个较小的文件时,我只会得到
我正在安装 babel core 6.26.0 per this documentation ,一切顺利,除了出现以下错误: npm WARN optional Skipping failed opt
这简直要了我的命,我不确定我是否知道如何调试它。 我正在使用 Mac FSEvents API 来监视文件系统上的给定文件夹。但是,有时某些文件夹会停止发送任何通知事件。到目前为止,这种情况仅发生在
我正在尝试在我的沙盒应用程序中使用 FSEvents 来监视某些目录。我实现了以下类(class): @implementation SNTracker - (id)initWithPaths:(NS
我在 FSEvents 上看到奇怪的行为,我在恢复模式下安装我的驱动器并在重新启动时在我的流中获得零 fsevents。 我执行以下操作: 定时开机 使用 FSEventsGetCurrentEven
尝试使用 npm 等进行 react ,我经常收到这些类型的警告: > npm install axios redux react-redux redux-thunk react-router-dom
我正在尝试在 Gitlab CI 上构建我的 Angular 应用程序,并使用 npm ci 安装依赖项,但我遇到了错误 ' 无法从汇总中访问 fsevents '。我试过 npm ci --no-o
关于如何检测回调方法中文件夹中引发的文件夹事件(FSEvent)的类型(下面代码中的gotEvent方法)有什么想法吗?例如:文件已重命名、文件已创建?我只想对“文件重命名”、“文件创建”进行一些操作
我正在使用 FSEvents API 来获取我正在跟踪的本地目录中的更改通知。 是否可以使用 FSEvents 或其他任何方式获取监视目录已移动到磁盘上其他位置的通知? 更新: 这是我到目前为止的代码
在 OS X 上,使用 FSEvents API,我可以轻松获取感兴趣的路径的文件和目录通知(创建、删除等)。但是,我想知道是否有任何方法可以获得执行操作的进程的 PID 或名称(例如,创建文件)。我
我正在尝试为我的程序编写测试用例,并且我听到了有关 testing-library/react 和 jest-junit 的好消息。我使用 npm 将这两个包安装到我的 devDependency 中
我需要为 Mac 中的文件夹创建 FSEvents 观察器。我对 C++ 很满意,有没有办法在 C++ 代码中获取 FSEvents 通知,而不是 Objective-C。是否有一些示例代码可以开始以
我刚刚设置了一个 FSEvent 以监视目标文件夹的状态。它工作得很好,因为每次发生更改时我都会收到通知,并且还会提供到发生更改的子目录的路径。但是,如果我想了解执行的操作是什么怎么办?是否添加、修改
最近将 OSX Lion 上的 Ruby 从 1.8.7 更新到 1.9.3。在此过程中,我丢失了安装在 1.8.7 上的 Ruby Gems,因此尝试重新安装它们。 遇到了 rb-fsevent G
我正在尝试使用 npx create-react-app first-react-app 创建 React 应用程序. 当它开始创建应用程序时,我每次都会收到以下警告。最后是创建一个应用程序。但原因是
什么时候国旗kFSEventStreamEventFlagItemInodeMetaMod被设置?在 Apple's developer documentation它说值(value)是: kFSEv
我已经使用 fsevents 设置了一个观察器机制。其要点是每次在文件夹 X 中创建文件时,我都希望运行一个函数。它现在运行良好,但我需要能够更改它正在监视的路径。这是设置代码: void *appP
我是一名优秀的程序员,十分优秀!