2015-01-22 6 views
0

FileSystemWatcher ~ 은 외부에서 열어 본 텍스트 파일이 수정되었거나 (Notepad ++ 등) 인 경우 내 프로그램에 알리려고합니다. 텍스트 파일이 내 프로그램에서 열렸으며 외부에서 열렸으며 수정 된 경우 프로그램에 알려야합니다.FileSystemWatcher 오류

내가 만든 내 다음 FileSystemWatcher 같이

Public Sub Watch() 
    Dim watcher As New IO.FileSystemWatcher() 

    'For watching current directory 
    watcher.Path = Path.GetDirectoryName(Var.SaveLocation) 'Note how to obtain current directory 
    watcher.NotifyFilter = NotifyFilters.LastWrite Or NotifyFilters.FileName 
    watcher.Filter = Path.GetFileName(Var.SaveLocation) 

    AddHandler watcher.Changed, AddressOf OnChanged 

    watcher.EnableRaisingEvents = True 
End Sub 

Private Sub OnChanged(sender As Object, e As FileSystemEventArgs) 
    MessageBox.Show("Reload") 
End Sub 

내 프로그램에서 OpenFileDialog를 방법에 Watch() 방법을 추가했습니다. 따라서 새 텍스트 파일을 열 때마다 FileSystemWatcher이 시작됩니다. 내 문제는 내가 프로그램 내에서 열어 본 텍스트 파일을 저장하면 OnChanged 이벤트가 활성화된다는 것입니다. 텍스트 파일을 외부에서 수정할 때 잘 작동합니다. 그러나 프로그램 내에서 이벤트 트리거가되는 파일을 저장해야하는 방식으로 작동합니다. 나는 내 프로그램에있는 동안 방아쇠를 당길 필요가 없기 때문에 이것을 원하지 않는다.

답변

0

filesystemwatcher에서 파일이나 응용 프로그램을 특별히 제외시키는 방법이 없다고 생각합니다. 한 가지 해결 방법은 파일 이름을 저장할 때 파일 이름을 목록에 추가 한 다음 filesystemwatcher 처리기에서 해당 목록을 확인하고 파일을 제거하는 것입니다.

+0

어떻게하면됩니까? 가능한 예제를 제공하고 있습니까? – Zer0

+0

Changed 이벤트에서 e.FullPath를 사용하여 변경된 파일을 볼 수 있고 e.ChangeType을 사용하여 변경 유형을 알 수 있습니다. e.FullPath가 응용 프로그램에서 저장 한 파일인지 확인하십시오. – xpda