QFileSystemWatcher
ドキュメントから:
たとえば、Mac OS X 10.4 およびすべての BSD バリアントでは、監視対象のファイルごとにオープン ファイル記述子が必要です。一部のシステムでは、デフォルトで開いているファイル記述子の数が 256 に制限されています。これは、プロセスが 256 を超えるファイルまたはディレクトリをファイル システム モニターに追加しようとすると、addPath() および addPaths() が失敗することを意味します。また、監視対象のファイルの記述子に加えて、プロセスで他のファイル記述子が開かれている場合があり、これらの他の開いている記述子も合計にカウントされることに注意してください。Mac OS X 10.5 以降では別のバックエンドを使用しているため、この問題は発生しません。
したがって、あなたの場合、これについてまったく心配する必要はありません。
QFileSystemWatcher
編集で要求した情報を提供していません。監視するパスの 1 つが変更されるとシグナルを発しますが、名前が変更された場合、新しい名前は取得されません。そのようなイベントの受信時に現在のビューを更新/リロードするだけのファイルマネージャープログラムなどを対象としています。
それ以上の情報が必要な場合は、OS 固有の API を使用する必要があります。Qt ソースのさまざまなプラットフォームで Qt が使用するコードを確認できます。ですsrc/core/io/qfilsystemwatcher_*.[h|cpp]
。
Mac OS X 10.5 以降の場合、使用される基本 API はFSEvents
API です。テクノロジーの概要ページで読むことができます。
注目すべき重要なポイントは、通知の粒度がディレクトリ レベルであるということです。ディレクトリ内の何かが変更されたことだけが通知され、何が変更されたかは通知されません。
そのため、OS レベルの API は、必要なものを直接提供しません。
古いバージョンの Mac OS X と FreeBSD の場合、Qt はkqueue
API とEVFILT_VNODE
イベント フィルターを使用します。その API は、名前が変更されたファイルの新しい名前も提供しません。
つまり、これらの API の 1 つに基づいて自分で何かをコーディングするか、それを行うライブラリを (ニーズを満たす保証付きで) 見つけるか、アプリケーションを再設計する必要があります。ポータブルな方法でディレクトリを「監視」することは、せいぜい非常にトリッキーであり、一般的に競合やエラーが発生しやすいものです。もし私があなただったら、特にあなたのデザインが「イベント」を見逃さないことを要求している場合、私は楽観的ではありません.