11-14-2015 12:28 AM
指定したフォルダを監視し、そのフォルダ内のファイルやフォルダに対して、
削除や名称変更が行われた場合に、検知したいです。
現在、.NETの「FileSystemWatcher」を使用して、色々と試しているのですが、
添付の「FileSystemWachter_1.vi」にあるようにすればとりあえずは、所望の動作は出来そうなのですが、
これをメインアプリに組み込もうとすると、どうしてもポーリング処理をすることになってしまいます。
そこで、イベントコールバックVIを用いて
ファイル・フォルダ名変更が変更されたときだけ、検知しようと
添付の「FileSystemWachter_Test」のようにしてみましたが、
うまく動作しません。
どのようにすれば、イベントコールバックVIを用いて
フォルダの監視が実現出来ますでしょうか。
宜しくお願いします。
添付VIは、LabVIEW2013で作成しています。
解決済! 解決策の投稿を見る。
11-14-2015 06:14 AM
自己レスですいません。
上記のファイル・フォルダ変更のイベントコールバック処理ですが、
「作成」したときだけは、イベントコールバック処理が実行されるようです。
他の「名称変更」「削除」「修正」などでは、処理が実行されないのは変わりませんが・・・。
ちなみにVB2010で、同じように処理を行ってみたところ、問題なく
「作成」「名称変更」「削除」「修正」すべてでイベント処理を行うことが出来ました。
11-14-2015 05:50 PM
hoshiken 様
下記を参考にすると良いと思います。
https://decibel.ni.com/content/docs/DOC-41654
FileSystemWatcherのイベントを受けてコールバックVIを実行します。
コールバックVIの中でLabVIEWのユーザイベントを生成すると、LabVIEWのイベントが発生します。
11-14-2015 05:56 PM
hoshiken 様
リンク先のサンプルがLV2014用でしたので、LV2013用に保存し直しました。
11-14-2015 08:38 PM
KONDOH 様
サンプルの紹介と、2013への変換ありがとうございます。
試してみたところ、問題なく動作しました。
また、イベントストラクチャ内に、変更検知後の処理を記述できるので、
かなり使い勝手が良くなりそうです。
この様に、.NETイベントをユーザーイベントに登録できる方法も
初めて知り、今後、いろいろな場面で役に立ちそうです。
大変助かりました。
ありがとうございました。
06-28-2017 07:25 PM
途中参加ですみませんが、
このサンプルプログラムを実行すると
フォルダ監視は出来るのですが、ファイル監視が出来ません。
ファイル監視をする方法をどうすればよいかご存知内でしょうか?
宜しくお願い致します。
開発環境はLabVIEW2015になります。
06-28-2017 07:37 PM
追記です。
ファイル指定時に発生するエラーコードは"1172"になっています。
詳細なエラー説明は下記になっています。
「エラーコード1172がUser Event - File System Watcher.lvlib:Create User Event - File System Watcher.vi内のプロパティノード (Arg :1) Error accessing property System.IO.FileSystemWatcher.Path, (System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。
Inner Exception: System.ArgumentException: ディレクトリ名 C:\Users\d11153\Desktop\CSV転送\ZR00000.csv が無効です。) で発生
考えられる理由:
LabVIEW: 外部アセンブリで.NET例外が発生しました。 このエラーを解消する方法については、以下の例外(太字)をコピーしてMicrosoft Developer Network(MSDN)またはその他のウェブサイトを検索してください。
System.ArgumentException」
06-28-2017 08:30 PM
File System Watcherは指定したディレクトリ内を監視し、そのディレクトリ内でのファイル・ディレクトリの変更を検知するものなので、ファイルを指定することは出来ないと思います。
ファイル単体を指定して、その変更を検知する方法は私は分かりません。
ただ、下記のようにするとやりたいことは出来るかかもしれません。ご参考まで。
・Callback Event.vi(その他)を修正して、検知したパスを取得できるようにする
・ファイルが入っているディレクトリを指定して、VIを実行
・イベントが発生したときにファイルパスを確認し、任意のファイルかどうか判定する