- PR -

【ディレクトリの監視】 FileSystemWatcherクラスについて

1
投稿者投稿内容
ひろ
会議室デビュー日: 2004/11/29
投稿数: 13
投稿日時: 2004-11-29 19:58
初めまして、木村と申します。
よろしくお願い致します。

監視対象のフォルダに作成された圧縮ファイルに対して
展開する処理を行ないたいのですが、
ファイルのコピーが完了する前に展開処理が走ってしまいます。

ファイルのコピー/移動が完了するのを待ってから、展開処理に移す方法
がございましたらご教授願います。



Private watcher As New System.IO.FileSystemWatcher()

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'監視するディレクトリを指定
watcher.Path = "C:\"

watcher.NotifyFilter = _
(IO.NotifyFilters.LastAccess Or IO.NotifyFilters.LastWrite _
Or IO.NotifyFilters.FileName Or IO.NotifyFilters.DirectoryName)

watcher.Filter = ""

AddHandler watcher.Created, AddressOf OnChanged

watcher.EnableRaisingEvents = True

End Sub

'イベントハンドラ
Public Shared Sub OnChanged(ByVal source As Object, _
ByVal e As System.IO.FileSystemEventArgs)
Select Case e.ChangeType

Case IO.WatcherChangeTypes.Created

     'ここに展開処理を加えました −−−−−−−−−−−−−−−−−−−
     'ファイルがPUTされた瞬間に展開処理が走るため、
     '不完全なファイルに対して展開を試みてしまいます。

End Select

End Sub



以上、よろしくお願い致します。
木村
Lin
ベテラン
会議室デビュー日: 2004/11/08
投稿数: 50
投稿日時: 2004-11-29 21:13
createdの後にchangedが断続的に発生するようですが、
それを捕らえてchangedが発生しなくなったら、
とするのかなぁ。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-11-29 21:16
引用:

ファイルのコピー/移動が完了するのを待ってから、展開処理に移す方法
がございましたらご教授願います。



確実な方法は無さそうです。

すぐに思いつくのは

・xxxという名前のファイルが作成されたら展開処理を開始
・展開処理を終了したらXXXを削除

のようなファイル交換の手順を取り決めるか、

・別途タイマーなどを用いて、転送ファイルが書き込み可能オープンできるまで待つ

とか。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
ひろ
会議室デビュー日: 2004/11/29
投稿数: 13
投稿日時: 2004-11-30 12:59
返信ありがとうございます。

WaitHandleクラスが使えるかと思い、MSDNを漁っておりますが、
良さそうなサンプルが見つけられません。
もし、参考になるページをご存知の方がおられましたら、
教えていただけないでしょうか。

以上、
ひろ
1

スキルアップ/キャリアアップ(JOB@IT)