問題タブ [readdirectorychangesw]
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.
c# - .NET FileSystemWatcher と ReadDirectoryChangesW を組み合わせて、フォルダー/ファイルのオープンを監視する方法は?
現在、FileSystemWatcher を使用してローカル ファイル システムの変更を監視していますが、フォルダー/ファイルのオープンを監視したいと考えています。多くの調査の後、これは ReadDirectoryChangesW を使用して実行できることがわかりましたが、この方法を FileSystemWatcher と一緒に使用することはできません。私の質問は、ReadDirectoryChangesW と FileSystemWatcher をこれを行う方法のサンプル コードと組み合わせる方法です。
c++ - 非同期の ReadDirectoryChangesW 呼び出しにより、スレッドの終了がブロックされる
序章:
新しく追加されたファイルの特定のディレクトリを監視する小さなアプリを作成しています。
監視コードを別のスレッドに配置したいので、メインスレッドを他のもののために空けておいて、必要なときに監視スレッドをキャンセルできます。
関連情報:
- 監視を行うためにReadDirectoryChangesWを使用しています
- スレッドの作成/同期に生の WIN32 API を使用しています
- Windows XP 以降をサポートしようとしています。
問題:
1 つのことを除いて、すべてを適切にコーディングすることができました。
監視スレッドを適切に終了できないため、この投稿を行います。
メイン スレッドでイベント オブジェクトを通知し、スレッドが終了するのを待ってから、クリーンアップを行います。
問題は、ReadDirectoryChangesW
そのコードをコメントアウトした後、すべてが正常に機能するため、私の使用法にあります。
イベント ハンドルが通知ReadDirectoryChangesW
されると、イベントを「キャッチ」して終了するのを防ぐスレッドをブロックします。ディレクトリに新しいファイルを追加すると、「ブロック解除」されReadDirectoryChangesW
、スレッドはイベントを「キャッチ」して終了します。
さらに役立つように、これまでに述べたことを示す小さなMVCEを以下に作成しました。
MVCE:
解決するための私の取り組み:
OVERLAPPED
構造体をスレッドからスレッドに渡された構造体に移動しました。次にOVERLAPPED.hEvent
、強制的に「ブロックを解除」するように設定しましたReadDirectoryChangesW
。これは機能しているように見えますが、文書化されていないため、安全ではなく、エラーが発生しやすいと思うので、私を怖がらせます。補完ルーチンを使用しようとしましたが、これらすべてに慣れていないため、成功しませんでした。
ReadDirectoryChangesW
通知を受け取ることはできましたが、最初のパスの後、バッファ ( で満たされたもの) の内容が正しく読み取られませんでした。私はまだ自分でこれを機能させようとしていますが、助けを借りることができます。I/o 完了ポートを使用することもできますが、1 つのディレクトリのみを監視するため、これは少しやり過ぎだと思います。私が間違っている場合は、I/o 完了ポートの使用方法を教えてください。試してみたいと思います。
質問:
上記の MVCE を考慮して、スレッド プロシージャ内のコードを変更する方法を教えていただけますか。これにより、(ReadDirectoryChangesW
ブロックせずに) 適切に終了します。
補完ルーチンを使用する必要があると感じています。その場合、疑似コードや説明書を使用するのはこれが初めてになるため、謙虚にお願いします。
進歩するたびに、この投稿を関連データで更新します。
c++ - ループ内で非同期に ReadDirectoryChangesW を使用する
前書き:
ループ内で非同期にReadDirectoryChangesWを使用しようとしています。
以下のスニペットは、私が達成しようとしていることを示しています。
問題:
コードが でReadDirectoryChangesW
返さFALSE
れた場合の処理方法がわかりません。GetLastError()
ERROR_IO_PENDING
ReadDirectoryChangesW
その場合、ループを続行し、処理できるリターンが返されるまでループを続ける必要がありbuffer
ます。
これを解決するための私の努力:
使用してみWaitForSingleObject(ovl.hEvent, 1000)
ましたが、エラーでクラッシュします1450 ERROR_NO_SYSTEM_RESOURCES
。以下は、この動作を再現する MVCE です。
ドキュメントを読むと、最後のパラメーターを に設定したGetOverlappedResultが必要なようですが、FALSE
この API を適切に使用する方法がわかりません。
質問:
MVCE は私がやろうとしていること (新しく追加されたファイルの名前を出力する) を非常によく示しているので、while
ループを機能させるためにループで何を修正する必要があるかを教えてもらえますか?
繰り返しますが、要点はReadDirectoryChangesW
、INTRODUCTION のスニペットに示されているように、ループ内で非同期に使用することです。
c++ - MSDN - ReadDirectoryChangesW は再帰しません
C++ プログラムのスレッド内からReadDirectoryChangesWを
実行しています。残念ながら、bWatchSubtree 引数を TRUE に設定していても、ルート ディレクトリのファイルが変更された場合にのみ通知を受け取ります。
ドキュメントには次のように記載されています。
bWatchSubtree [in]
このパラメーターが TRUE の場合、関数は指定されたディレクトリをルートとするディレクトリ ツリーを監視します。このパラメータが FALSE の場合、関数は hDirectory パラメータで指定されたディレクトリのみを監視します。
私は何が欠けていますか?
ありがとう!
kk
python - ReadDirectoryChangesW すべてのアクション
私は、Tim Golden のコードを使用して、ReadDirectoryChangesW 関数を使用してディレクトリの変更 ( http://timgolden.me.uk/python/win32_how_do_i/watch_directory_for_changes.html ) を読み取ります。彼のコードには、関数 ReadDirectoryChangesW が返す 5 種類のアクションを含む Enum があります。何かに」
この列挙型に追加するオプションが他にもあるのだろうか。ファイルサイズの変更、属性の変更、およびこのコードでは両方が「更新された」列挙型であるかどうかを確認したい..しかし、更新ごとに関数から異なるintを取得したい. また、関数が返す値がもっとある場合は、それも見たいです! ありがとう!