2016-07-28 4 views
0

VBの初心者として私はFileSystemWatcherにいくつかの問題があります。いくつかの不吉な理由のために、どんな出来事も起こさない。ディレクトリにコピー、削除、または編集中のファイルがないかどうかチェックしたい。FileSystemWatcherはイベントを起動していません

何か助けていただきありがとうございます。ここで

が私のコードです:

Public Class FileWatcher 

Public Sub run(path As String) 
    Dim watcher As New FileSystemWatcher() 

    watcher.Path = path 
    watcher.Filter = "*.xml" 
    watcher.NotifyFilter = NotifyFilters.FileName Or NotifyFilters.LastWrite Or NotifyFilters.CreationTime 

    AddHandler watcher.Changed, AddressOf OnChanged 
    AddHandler watcher.Created, AddressOf OnChanged 
    AddHandler watcher.Deleted, AddressOf OnChanged 
    AddHandler watcher.Renamed, AddressOf OnRenamed 

    watcher.EnableRaisingEvents = True 

End Sub 


Public Function OnChanged(source As Object, e As FileSystemEventArgs) As String 
    ' Returns file name for later use 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    Return e.FullPath 
End Function 

Public Function OnRenamed(source As Object, e As RenamedEventArgs) As String 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    Return e.FullPath 
End Function 

エンドクラス

+0

関連:http://stackoverflow.com/a/37553538/3740093 –

答えて

0

ここで考慮すべき最初の事はウォッチャーがrunメソッド内のローカル変数であるという事実です。つまり、ウォッチャーはrunメソッドを終了した直後にガベージコレクションされます。 globlalクラス・レベルで宣言し、監視コードの使用を終了するまでそのクラスのインスタンスを存続させる必要があります。

Public Class FileWatcher 
    Dim watcher As New FileSystemWatcher() 

    Public Sub run(path As String) 

     .... 

OnChangedとOnRenamedはイベントハンドラであることに注意してください。したがって、関数としてSubとして宣言する必要があります。もちろん、何も返さない

これらのハンドラの値が必要な場合は、後で処理するためにデータを保持する何らかの種類のグローバル変数を実装する必要があります。リスト(例:追加されたファイルと削除されたファイルを区別するために文字列のリストを展開するか、独自のクラスとこのクラスのインスタンスのリストを使用する必要があります)

Dim changedFiles = new List(Of String)() 
Dim renamedFiles = new List(Of String)() 
Public Sub OnChanged(source As Object, e As FileSystemEventArgs) 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    changedFiles.Add(e.FullPath) 
End Sub 

Public Sub OnRenamed(source As Object, e As RenamedEventArgs) 
    Console.WriteLine("Monitoring: " + e.FullPath) 
    renamedFiles.Add(e.FullPath) 
End Sub 
+0

ありがとうございました! – Lilly

+0

助けになるのはうれしいですが、ただの質問です。あなたはなぜあなたを助ける答えを受け入れることをやめましたか? – Steve

+1

申し訳ありませんが、どうか忘れました – Lilly

関連する問題