[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/01/16(Tue) 21:05
投稿者名:mura
Eメール:
URL :
タイトル:
VBからネットワークファイルを1秒に1回監視する
マシンが2台存在(A,B)し、Aでファイルを更新します。
Bでは、ネットワークを介して、ファイルが変更されたか
どうか、1秒に1回監視します。
監視方法としては、OPEN,GET,CLOSEを使用して
GETした内容で変更されたか判断します。

つまり、1秒に1回、OPEN,GET,CLOSEを行う事になりますが
ある人に話したら、現実的じゃないね。といわれました。
ハードディスクへのアクセス頻度が問題だとか・・・

1.ファイルが変更されたかどうか、アクセス頻度を増やさずに
 確認ってできるんでしょうか。

2.この方法だと、
 ネットワークの負荷も結構かかるんでしょうか。

3.DIR関数も、OPEN、GETのようなファイルアクセスになりますか?

4.ファイルの更新時間を取得して、変更があった とか判断できますか?

長くなりましたが、よろしくお願いします。

投稿時間:2007/01/16(Tue) 21:44
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: VBからネットワークファイルを1秒に1回監視する
> 1.ファイルが変更されたかどうか、アクセス頻度を増やさずに
>  確認ってできるんでしょうか。
監視側が、更新されたかを定期的にチェックするのではなく、その逆に
変更した側が、監視側に通知する形態にすれば、通信回数は大幅に減りますね。

> 2.この方法だと、
>  ネットワークの負荷も結構かかるんでしょうか。
なにを「結構」と見るかは、ケースバイケースでしょう。
(極端な話、ダイアルアップネットワークなら、課金の問題も出るわけですし)
負荷を心配するのであれば、実際に測定して確認すべきだと思いますよ。

> 3.DIR関数も、OPEN、GETのようなファイルアクセスになりますか?
Dirであっても、ファイルシステムへのアクセスとはなるでしょう。
負荷量はまるで違うでしょうけれども。

> 4.ファイルの更新時間を取得して、変更があった とか判断できますか?
可能ですが、ファイルシステムの違いによる分解能に注意してください。
たとえばVFAT の場合、ファイル更新日時は 2秒単位で記録されることになります。

投稿時間:2007/01/17(Wed) 09:19
投稿者名:mura
Eメール:
URL :
タイトル:
Re^2: VBからネットワークファイルを1秒に1回監視する
魔界の仮面弁士さんありがとうございます。

> 監視側が、更新されたかを定期的にチェックするのではなく、その逆に
> 変更した側が、監視側に通知する形態にすれば、通信回数は大幅に減りますね。

具体的には、どのような通知方法がありますか?

投稿時間:2007/01/17(Wed) 23:23
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: VBからネットワークファイルを1秒に1回監視する
>>> マシンが2台存在(A,B)し、Aでファイルを更新します。
>>> Bでは、ネットワークを介して、ファイルが変更されたか
>>> どうか、1秒に1回監視します。
>> 監視側が、更新されたかを定期的にチェックするのではなく、その逆に
>> 変更した側が、監視側に通知する形態にすれば、通信回数は大幅に減りますね。
> 具体的には、どのような通知方法がありますか?

具体例、ですか。えぇと…現状は、
 A は、自身の C:\folder\file.txt (共有名: \\pc_a\folder\file.txt) を、不定期に更新する。
 B は毎秒、\\pc_a\folder\file.txt が更新されているかをチェックする。←通信負荷が大きい
のようなイメージで良いでしょうか?


だとすれば、それをたとえば、
 A は、file.txt を更新した後、B にファイルを作成する。(\\pc_B\notice\end_of_a.txt)
 B は毎秒、自身に end_of_a.txt が作成されたかを DIR で監視し、作成されていた場合のみ、
  \\pc_a\folder\file.txt を取得するようにする。
という仕様にすれば、ネットワーク上の通信回数は、最低限になりますね。


さらに、この仕様にある「B が毎秒、自分の HDD を読み取る」という物さえも省きたいなら、
 A が B に、任意の「変更通知」を MSWinSock なり、DCOM なりで投げる。
という手段もあるでしょうし、あるいは、
 B に 監視アプリを常駐させるのではなく、A が、「B に exe を実行させる」ようにする。
 http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept04/hey0901.mspx
とか、
 VB6 製の IIS Application を B 上に配置し、A が、その URL を呼ぶようにする。
といった手もあるかも。

投稿時間:2007/01/25(Thu) 08:48
投稿者名:mura
Eメール:
URL :
タイトル:
Re^4: VBからネットワークファイルを1秒に1回監視する
魔界の仮面弁士さん ありがとうございます。
お礼が遅れてしまい申し訳ありません。

前回までは、ネットワークの負荷についての質問でしたが、
大変、勉強になりました。
どの方法が、一番良いのか検討してみます。

さて、話しは少し変わりますが、
共有ファイル操作の資源管理はどうしたらよいでしょうか。
ファイルはマシンAにあります。マシンBはマシンAのファイルにアクセスします。
マシンA,B両方でファイルの更新を行います。相手が操作中は、待ちに入るような
処理を行いたいです。

Aでファイル操作(OPEN->GET->PUT->CLOSE)している場合に、Bでファイルにアクセス
しようとしたら、Bでは待ちに入って、Aでファイル操作が終わったら
Bの処理(OPEN->GET->PUT->CLOSE)を行う。
逆に、Bがファイル操作している場合、Aがファイルにアクセス
しようとしたら、Aでは待ちにはいり、Bでファイル操作が終わったら
Aの処理(OPEN->GET->PUT->CLOSE)を行う。

投稿時間:2007/01/25(Thu) 11:33
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: VBからネットワークファイルを1秒に1回監視する
単純なところでは、Open ステートメントの Lock Write / Lock Read Write ロック指定で
対処することができるかも知れません。

ロック済みファイルを開いた場合にはエラーになるでしょうから、それに応じて、
数秒後に、再度開きなおすといった処理を加えてやれば OK かも。

# 試してません。

投稿時間:2007/01/25(Thu) 12:18
投稿者名:mura
Eメール:
URL :
タイトル:
Re^6: VBからネットワークファイルを1秒に1回監視する
試してみました。
できそうです。
ありがとうございました。

> 単純なところでは、Open ステートメントの Lock Write / Lock Read Write ロック指定で
> 対処することができるかも知れません。
>
> ロック済みファイルを開いた場合にはエラーになるでしょうから、それに応じて、
> 数秒後に、再度開きなおすといった処理を加えてやれば OK かも。
>
> # 試してません。