C#でフォルダー監視ツール作成

もうほぼ完成はしたのだが、まだもう少し色々といじって遊んでいる。

自分で作るのが面倒だったのでネットでフォルダー監視で色々とツールをまさぐってみたのだが全部使い物にならなかった。

と言うのもなんか俺が見つけたのがそうなのか、ポーリングするツールで5秒とか時間を設定して有っても無くてもファイルを探して見つかったときだけ反応すると言う仕様のものばかりだった。

なんでそんなめんどっちいの公開しているのか解らないが、.NETならSystem.IO.FileSystemWatcher()こう言うメソッドがあって、ファイルの更新イベントをフックすることが出来るのでイベント登録しておけばWindowsが勝手にイベント投げてくれるのでその時初めて動作すれば良いと言うアプリが超簡単に作成出来る。

タイマー回して監視するよりよっぽど楽ちんでAndroidで言う所のIntentを拾うような物だ。

ただ、挙動を色々と把握する必要があって、ファイルがダウンロードされた場合Createイベントが発生するので基本的にそれをキャッチすれば良い。

他に、更新、削除、リネームなどのイベントも拾えるので全部登録すると面倒な事になる。

ファイルがダウンロード若しくは新規で保存された場合、Createが一番最初に発火するものの、そのあと更新イベントも発火してこれが2回とか3回とか状況が読めないのだ。

ファイルを更新する際に日付とかの変更も更新と判断されるので新規でファイルを作成した後、最終アクセスが走るため更新イベントも飛んでくると言うイベントの仕組みとなるわけだ。

なので、このファイルコピーツールは取りあえずCreateのイベントだけを拾って、その後がまた厄介でCreateイベントを拾って立て続けにコピーを走らせると他のプロセスでアクセスしている為と言う例外が発生してしまう。

これも、ファイルが書き込まれる最中、Lockが自動的にかかる様で、このLockの状態を確認してからコピーを走らせる必要があった。

開いているファイルをコピーしようとする場合、今度は別のメソッドでストリームリードかなにかその辺りのメソッドでファイルを読み込んで、そのストリームバッファをコピー先に書き込むと言う大技を組む事になるので、これは結構面倒になる。

処理としては車検証閲覧アプリからCSVをダウンロードした直後に動作させたいだけなので、他のアプリがつかむ要素はなく、そのままコピーを走らせる事ができる。

なので、一旦Lockが解除されるまで待機してからコピーを走らせる様にして、概ね完成した。

ちなみに、リネームや削除などのイベントも扱いたい場合は、別のオブジェクトにイベントを割り当てて同時に待機させて、作成イベントを拾うだけの処理とその他諸々を受け持つ部分をわけて作ればすむはなしだ。

後は、タスクトレイに格納して常駐アプリに仕立てれば良いのでNotifiを使ってタスクトレイに格納するアプリにして、タスクトレイのアイコンをクリックするとフォームが開いて監視場所を変更出来る様にした。

監視対象のフィルターも拡張子一個しか普通には設定出来ないので複数の拡張子、ファイルをフィルターにしたい場合はちょっと配列を絡めて設定をすると複数パターンのフィルターをかけることができるのだが、今回はcsvファイルだけを対象にしたので1つで良いが、一応、拡張子も変更出来る様にした。

動きとしては色々な操作を想定してどんな操作をしてもエラー無く処理させるが、それでもエラーが出た場合の処理を想定してあれこれテストを実施中で自分で納得出来れば提供する。

それと、基本的な運用としては1ファイルをダウンロードするだけなので解決しているが、手動でcsvファイルを纏めてコピーした場合に全部を綺麗に処理してくれず、歯抜け処理になってしまう。

これは、複数のファイルが投げられた場合の処理を想定していないからなので、そういう使い方をされた場合になにか簡単な方法が無いか実運用では利用しない機能だが、ここを想定して実装しているのがプロの仕事だろう。

まぁもう少し実験してから実務での利用と、公開を予定している。

車検証閲覧アプリがダウンロードするフォルダを何故か決め込んでいて、ハードコーディングしている様に思える。

何故かと言うと、ダウンロードフォルダーの場所はCドライブではなく別のドライブに設定して運用していて、ダウンロードしたファイルを共有する為、NASにダウンロード共有フォルダーを作成して、マイコンピュータのダウンロードフォルダの場所もそのNAS上のパスに変更している。

であるにもかかわらず、その状態で車検証閲覧アプリからCSVをダウンロードするとファイルが消滅する。

何処に保存されたのか不明になるのだ。

面倒なので調べて無いが、恐らく移動元の初期値のダウンロードフォルダーか何かにハードコーディングしている初心者開発アプリだと判断したので国交省に問合せしたが的を得た回答を得られなかったのと、変更出来る様になる予定は無いそうだ。(スキルレベル低空飛行だな)

と言う事で、このファイル監視ツールの作成にいたったと言う訳だ。

ところが、世の中監視と言うとイベントを拾うと言う発想では無くループを回し続けると言う不健全な発想の元、開発しているアプリが多すぎる。

そのため、1秒とかでループせずに5秒くらいにした方が良いですなんて注意書きが書いてあるわけで、そのアプリがWindowsのパフォーマンスに影響する事に責任感が感じられない。

いくつか使って見たのだが、ハイパフォーマンスのPCばかりの環境ではないので、動作させると、全くWindowsが動かなくなると言うお粗末なものまであって、これ使っている人いるのか不思議だった。

ネットの解説なんかでも堂々とループして監視するアプリを作ったなんてどや顔が見えてきそうな記事まで散見した。

実は、自作前にインストールまでしてしまい、アンインストールするのに結構手間がかかったのでムカついたが、まぁ収まった。

で結局、パソコンもアプリも自作が一番だ。

ダウンロード

コメント