問題タブ [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 クライアントを見てきましたが、現在、別のサービスに同様のインターフェイスを実装することを研究しています。

このようなファインダーとどのように正確にインターフェースしますか?フォルダーに表示されているこれらのオブジェクトが、読み込みのたびにダウンロードされる実際のドキュメントであるとは思えませんか? 必要に応じて動的にダウンロードする必要があります。では、実際のファイル システム オブジェクトを持たずに、これらのアイテムをファインダーに表示するにはどうすればよいでしょうか?

Mac OS Xでこれがどのように達成されるか知っている人はいますか?

または、ファインダーと同様の統合を持つApple APIまたは他のオープンソースプロジェクトへのポインターはありますか?

0 投票する
5 に答える
1452 参照

objective-c - FSEvents によってトリガーされたときに NSTableView -setDataSource が機能しない

だからここに私が持っているものがあります:

  • NSMutableArray データ ソースを持つ NSTableView
  • テーブル ビューのデータを含むファイルを含むフォルダーを監視する FSEvents ( Objective-C 抽象化の良さのためにSCEventsを使用)
  • FSEvents は、UI のリロード ボタンと同じ機能をトリガーします。この関数は、上記のファイルの内容に基づいて、新しいデータ ソースでテーブル ビューを更新しますsetDataSource:

そして、何が起こるかは次のとおりです。

  • ファイルに変更を加えると、FSEvent がトリガーされ、refresh メソッドが呼び出されます。
  • テーブル ビューが受け入れる配列には、FSEvent をトリガーした変更が実際に含まれています。
  • setDataSource:正しいデータソースで NSTableView に送信されます。
  • 変更はテーブル ビューに表示されません。

しかしその後:

  • 更新ボタンをクリックすると、FSEvent とまったく同じメソッドがトリガーされ、テーブル ビューが新しいデータで更新されます。

FSEvent を NSNotification( NSApplicationDidBecomeActiveNotification) に置き換えてみましたが、同じことが起こります。

なぜこれが起こっているのか誰にも分かりますか?

編集:明確にするために、私の質問の主旨は次のとおりです:ボタンを押すとトリガーされたときに NSTableView がリロードされるのはなぜですか?

編集: diciuのおかげで、実際には、イベントによってトリガーされたときにすべての UI 参照が 0x0 を指しているが、ボタンのクリックによってトリガーされたときに有効なアドレスを持っていることがわかりました。これらのオブジェクトはすべて IB で宣言されているため、私のコードではインスタンス化や割り当ては行われません。だから私の質問は今です:これらのポインターがnilを指すのを止めるにはどうすればよいですか?

0 投票する
3 に答える
3506 参照

macos - MacOSXで新規または変更されたファイルを検出する方法

Windows OSでは、MSはReadDirectoryChangesWとFindFirstChangeNotification APIを提供して、新しいファイルまたは変更されたファイルを検出しますが、Mac OSXも同等の機能を提供しますか?

0 投票する
1 に答える
1934 参照

macos - OS X Leopard での FSEvents の奇妙な点

Mac 上のいくつかのディレクトリのファイル システム イベントを監視したいと考えています。監視したいディレクトリは実行時に変更される可能性があるため、FSEvents を使用すると、私のアプリは次のようになります。

  • コールバックを処理するグローバル コールバック関数を作成します
  • フォルダーごとに新しい FSEventStreamRef を作成し、それを上で作成したコールバックに関連付け、変更コールバックをこのフォルダーに関連付けるのに役立つコンテキストを eventStream に追加します。

ほとんどは機能しているように見えますが、コールバックが呼び出され、'eventPaths' 値がコールバックに送信されるときに奇妙なことに気付きました。

たとえば、/Foo と /Bar の StreamRef を作成した場合、/Bar にファイルを追加すると、コールバックがすぐに呼び出されますが、eventPaths は /Foo 内の場所を指し、StreamRef に関連付けられたコンテキストは次のようになります。 /Fooのそれも。

または、/Foo と /Bar を監視していて、/Bar を削除するとします (/Bar の StreamRef を正しく停止して閉じることにより)。/Fee の新しい FSEventStreamRef を作成し、同じコールバックに関連付けます。/Fee を変更してもコールバックは呼び出されませんが、/Foo を変更すると引き続きコールバックが発生します。

オンラインで見た例やドキュメントでは、単一のフォルダーの監視についてのみ説明しています。単一のコールバックを複数の FSEventStreamRef に関連付ける方法に問題がありますか? それは問題ではないように聞こえますが...

誰かが確実に機能する方法で同様のことをしたことがありますか、または私が別の方法で試す可能性のある提案はありますか?

これを実験していたときに私がやろうとしたことの1つは、単一の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 が機能しなかったので、Mac OS X の FSEvents API の Cocoa ラッパーである SCEvents に頼りました。すべての SCEvents を処理する「EventListener」という別のクラスがあります。

次のメソッドがあります。

(これらのメソッドは SCEvents サンプル アプリから直接取得しました。これが機能するようになったら、自分の目的に合わせて変更する予定です)

次に、メイン アプリのデリゲート クラスの applicationDidFinishLaunching メソッドに次のように記述します。

リスナーを初期化します。これを割り当てて setupEventListener クラスを呼び出すと、すべて正常に動作します。ホーム フォルダー内の変更は、本来あるべき姿でデバッガー コンソールに記録されます。format: と呼ばれる別のメソッドがあります。これは、いくつかのシェル スクリプトを実行します。問題は、フォーマット メソッドが実行されているときに、イベント リスナーが機能しなくなることです。ホーム フォルダへの変更はログに記録されません。この問題は format: メソッドでのみ発生します。他のすべてのメソッドでは、イベント リスナーは正常に機能します。

何が問題なのかわからない。ありがとう

0 投票する
1 に答える
172 参照

macos - ファイル システム イベントをサポートする OS X の最小バージョンは何ですか?

FSEvents aka File System Events を使用して、フォルダー階層の内容の変更をリッスンしたいと考えています。私のテストでは、File System Events は素晴らしい仕事をします。ただし、Tiger で動作するかどうかについての情報は見つかりません。

誰でも知っていますか?

0 投票する
4 に答える
18356 参照

macos - Mac OS X でのファイル レベルのファイル システム変更通知

特定のディレクトリの下にあるファイルが (直接的または間接的に) 変更されたときにコードに通知されるようにします。「変更」とは、ファイルの内容が変更されたり、名前が変更されたり、削除されたりするたびにコードに通知することを意味します。または新しいファイルが追加された場合。私のアプリケーションでは、何千ものファイルが存在する可能性があります。

私は FSEvents のように見えましたが、その技術概要には次のように書かれています。

注目すべき重要なポイントは、通知の粒度がディレクトリ レベルであるということです。ディレクトリ内の何かが変更されたことだけが通知され、何が変更されたかは通知されません。

また、次のようにも述べています。

また、ファイル システム イベント API は、特定のファイルがいつ変更されたかを検出するようには設計されていません。このような目的には、kqueues メカニズムの方が適切です。

ただし、特定のファイルで kqueue を使用するには、ファイルを開いてファイル記述子を取得する必要があります。何千ものファイル記述子を管理するのは現実的ではありません (また、オープン ファイル記述子の最大許容数を超える可能性があります)。

不思議なことに、Windows ではこのReadDirectoryChangesW()関数を使用できます。

では、Mac OS X で私が望むことをどのように行うことができるでしょうか? または、別の方法で尋ねられました:ReadDirectoryChangesW()ユーザー空間で Mac OS X に相当するものを作成するにはどうすればよいでしょうか (非常に効率的に行います)。