オペレーティングシステムは、新しいファイルが作成されたときに通知できますか?
-
03-07-2019 - |
質問
ディレクトリを時々スキャンするのではなく、特定のディレクトリに新しいファイルがいつ作成されるかを知りたい。
新しいファイルが作成されたことをオペレーティングシステムにプログラムに通知させる方法があることを理解しています。どのように機能しますか?
解決
OSによって異なります。
Windowsでは、ベースAPIはディレクトリの変更通知。
タグでLinuxに言及しているため、これは inotify API になります。
OS Xの回答に追加するには、10.5の時点で、 FSEvents API 。
他のヒント
Linuxでは、通知をご覧ください。
方法理想的にはPOSIXを使用して、C / C ++でファイル/ディレクトリが変更されたことを通知します
またはstackoverflowでinotifyを検索すると、多くのアイデアが得られます
FAM は、すべてのUNIXで一貫したファイル監視インターフェイスを提供します。 Linuxでは、バックエンドデーモンは Gamin に置き換えられますが、プログラムはリンクされますFAMを使用すると、Gaminでも問題なく機能します。 (舞台裏では、FAMはポーリングを使用し、Gaminはinotifyまたはdnotifyまたはkqueueを使用している場合がありますが、実装について心配する必要はありません。)
OS X.5には FSEvents があります。指定されたファイルやディレクトリの代わりにシステム全体を監視するという点で非常に異なりますが、ニーズも満たします。
Windowsでは、 Find(First | Next | Close)ChangeNotificationまたはReadDirectoryChangesを参照してください。 。
FileSystemWatcherが答えです-再帰的に機能します。
こちら(FileSystemWatcherを検索)の例があります
Mac OS Xでは、この機能はSpotlight APIの一部です。
Windowsで.Netを使用する(Linux / monoについてはわかりません)FileSsytemWatcherを使用して、新しいファイルを監視し、作成時にイベントを発生させることができます。
MSDNから:
FileSystemWatcherを使用して監視します 指定されたディレクトリの変更。君は ファイルの変更を監視でき、 指定されたサブディレクトリ ディレクトリ。コンポーネントを作成できます ローカルコンピューター上のファイルを監視するには、 ネットワークドライブ、またはリモートコンピューター。
Windows APIは、ファイルシステムを監視する機能を提供します-ここに例があります http://msdn.microsoft.com/en-us/library/aa365261%28VS.85%29.aspx