NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

ファイル・フォルダ変更があったら、コールバックVIを実行する方法

解決済み
解決策を見る

指定したフォルダを監視し、そのフォルダ内のファイルやフォルダに対して、

削除や名称変更が行われた場合に、検知したいです。

 

現在、.NETの「FileSystemWatcher」を使用して、色々と試しているのですが、

添付の「FileSystemWachter_1.vi」にあるようにすればとりあえずは、所望の動作は出来そうなのですが、

これをメインアプリに組み込もうとすると、どうしてもポーリング処理をすることになってしまいます。

 

そこで、イベントコールバックVIを用いて

ファイル・フォルダ名変更が変更されたときだけ、検知しようと

添付の「FileSystemWachter_Test」のようにしてみましたが、

うまく動作しません。

 

どのようにすれば、イベントコールバックVIを用いて

フォルダの監視が実現出来ますでしょうか。

 

宜しくお願いします。

 

添付VIは、LabVIEW2013で作成しています。

すべてをダウンロード
0 件の賞賛
メッセージ1/8
5,321件の閲覧回数

自己レスですいません。

 

上記のファイル・フォルダ変更のイベントコールバック処理ですが、

「作成」したときだけは、イベントコールバック処理が実行されるようです。

他の「名称変更」「削除」「修正」などでは、処理が実行されないのは変わりませんが・・・。

 

ちなみにVB2010で、同じように処理を行ってみたところ、問題なく

「作成」「名称変更」「削除」「修正」すべてでイベント処理を行うことが出来ました。

0 件の賞賛
メッセージ2/8
5,301件の閲覧回数
解決策
トピック作成者hoshikenが受理

hoshiken 様

 

下記を参考にすると良いと思います。

https://decibel.ni.com/content/docs/DOC-41654

 

FileSystemWatcherのイベントを受けてコールバックVIを実行します。

コールバックVIの中でLabVIEWのユーザイベントを生成すると、LabVIEWのイベントが発生します。

 

 

メッセージ3/8
5,286件の閲覧回数
解決策
トピック作成者hoshikenが受理

hoshiken 様

 

リンク先のサンプルがLV2014用でしたので、LV2013用に保存し直しました。

 

メッセージ4/8
5,285件の閲覧回数

KONDOH 様

 

サンプルの紹介と、2013への変換ありがとうございます。

 

試してみたところ、問題なく動作しました。

また、イベントストラクチャ内に、変更検知後の処理を記述できるので、

かなり使い勝手が良くなりそうです。

 

この様に、.NETイベントをユーザーイベントに登録できる方法も

初めて知り、今後、いろいろな場面で役に立ちそうです。

 

大変助かりました。

ありがとうございました。

0 件の賞賛
メッセージ5/8
5,274件の閲覧回数

途中参加ですみませんが、

このサンプルプログラムを実行すると

フォルダ監視は出来るのですが、ファイル監視が出来ません。

ファイル監視をする方法をどうすればよいかご存知内でしょうか?

宜しくお願い致します。

 

開発環境はLabVIEW2015になります。

0 件の賞賛
メッセージ6/8
3,521件の閲覧回数

追記です。

ファイル指定時に発生するエラーコードは"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」

0 件の賞賛
メッセージ7/8
3,514件の閲覧回数

File System Watcherは指定したディレクトリ内を監視し、そのディレクトリ内でのファイル・ディレクトリの変更を検知するものなので、ファイルを指定することは出来ないと思います。

 

ファイル単体を指定して、その変更を検知する方法は私は分かりません。

ただ、下記のようにするとやりたいことは出来るかかもしれません。ご参考まで。

 

・Callback Event.vi(その他)を修正して、検知したパスを取得できるようにする

・ファイルが入っているディレクトリを指定して、VIを実行

・イベントが発生したときにファイルパスを確認し、任意のファイルかどうか判定する

0 件の賞賛
メッセージ8/8
3,505件の閲覧回数