2014-01-09 2 views
-2

FileSystemWatcher를 사용하여 한 위치에서 다른 위치로 PDF를 이동하는 방법은 다음과 같습니다.FileSystemWatcher가 끝났을 때 알아야하는 방법

Public Sub WATCHER() 

    'CREATE NEW FILESYSTEMWATCHER 
    Dim Watcher As New FileSystemWatcher() 
    Watcher.Path = "<<path>>" 
    Watcher.NotifyFilter = NotifyFilters.LastWrite 
    Watcher.Filter = "*.pdf" 

    AddHandler Watcher.Changed, AddressOf OnChanged 
    AddHandler Watcher.Created, AddressOf OnChanged 

    Watcher.EnableRaisingEvents = True 

End Sub 

Private Sub OnChanged(source As Object, e As FileSystemEventArgs) 

    'MOVE PDFs TO NEW LOCATION 
    For Each foundFile As String In My.Computer.FileSystem.GetFiles("<<path>>", FileIO.SearchOption.SearchAllSubDirectories, "*.pdf") 
     Dim foundFileInfo As New System.IO.FileInfo(foundFile) 
     'ToolStripStatusLabel1.Text = "Moving PDFs..." 
     File.Move(foundFile, "<<path>>" & foundFileInfo.Name) 'MOVES PDFs 
    Next 

End Sub 

모든 PDF가 이동 된 후에 만 ​​계속 진행하고 싶습니다. 모든 파일이 이동되었다는 메시지 상자가 표시됩니다. 이사가 완료되었을 때 제기되는 사건이 있습니까?

+2

파일 워처가 실제로 완료되지 않았거나 앱이 끝날 때까지 작업이 완료 되었습니까? 저것은 감시자의 지적이 아닙니까? – Plutonix

+0

제 생각에 언제든지 관측자를 시작할 수 있습니다. 나는 또한 당신이 애플 리케이션을 닫지 않고 언제든지 그것을 막을 수 있다고 생각. 내가 파일 감시자에 관한 모든 것을 알고 있다면 내가 질문을하지 않았을 것이고, 분명히 그것에 대해 모든 것을 알지 못했기 때문에 내가 투표를했다, 좋은 응? – Muhnamana

+0

예, 시작 및 중지 할 수 있지만 실행중인 한 절대로 완료되지 않습니다. 마지막 동작을 나타내는 레이블과 같은 일종의 진행 보고서가 필요할 수 있지만 크로스 스레드 호출과 경쟁해야합니다. – Plutonix

답변

0

필자는 File.Move가 동기 메서드라고 생각합니다. for 루프 다음에 사용자에게 모든 것이 이동되었다는 메시지를 보낼 수 있습니다. File.Move는 디스크에서 아무 것도 움직이지 않기 때문에 실행하는 데 시간이 오래 걸리지 않으며 파일 경로 만 업데이트합니다. File.Move를 File.Copy와 바꾼다면 사용자에게 모든 것이 끝났음을 알리기 전에 더 큰 지연이 표시되어야합니다.

+0

그건 내 생각 이었어. 나는 이것을 시험해 보았고, 2 개의 파일 만 움직 였고, msgbox를 던져서 파일들을 함께 움직이는 것을 멈췄다. 필자는 약 1,500 개의 PDF 파일로이를 테스트했습니다. – Muhnamana

+0

같은 디렉토리에있는 파일을 이동하려고 했습니까? 아니면 하위 디렉토리에있는 일부 파일을 가지고 있었습니까? – Gandy

+0

FileSystemWatcher 코드 – Gandy