2013-09-27 6 views
1

NotifyFilters.FileName 및 NotifyFilters.DirectoryName 필터를 사용하여 파일/디렉토리 만들기/삭제 이벤트를보기 위해 FileSystemWatcher를 사용하는 응용 프로그램을 개발 중입니다. 또한 IncludeSubdirectories를 true로 설정합니다.FileSystemWatcher - Windows Explorer-> Undo

Windows 탐색기에서 폴더를 복사하면이 새 폴더의 모든 하위 항목 및 새 폴더 자체에 대한 만들기 이벤트가 생성됩니다. 그러나 Windows 탐색기 (하위 항목 포함)에서 폴더를 삭제 한 다음 Windows 탐색기에서 해당 작업을 "실행 취소"하면 하위 항목이 아닌 폴더 만 생성 이벤트가 발생합니다.

하위 항목이 그 시점에 존재하지 않을 수 있기 때문에 단순히 Directory.GetFiles()를 수행 할 수는 없으며 나중에 파일의 개수/크기에 따라 나중에 파견 할 수 없습니다. 실행 취소 작업을 완료하는 데 오랜 시간이 걸릴 수 있으며 발송 지연 시간을 알 수 없습니다.

NotifyFilters.Attributes 플래그도 수신하면 실행 취소 작업의 각 하위 항목마다 ResourceChanged 이벤트가 발생하지만 ResourceChanged 이벤트는 다른 많은 상황에 대해 발생하는 것으로 나타났습니다. 나는 정말로 결정적인 창조 사건을 찾고있다.

제안 사항?

답변

0

탐색기에서 파일을 삭제하면 파일이 휴지통으로 이동됩니다. 파일이 휴지통에서 복원되면 휴지통에 감시자를 추가하여 파일을 감지 할 수 있습니다. 휴지통의 경로를 찾는 것은 조금 까다 롭지 만이 코드는 작동합니다.

WindowsIdentity currentUser = WindowsIdentity.GetCurrent(); 
string path = string.Format(@"C:\$Recycle.Bin\{0}", currentUser.User.Value); 
FileSystemWatcher w = new FileSystemWatcher(path, "*.*"); 
w.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName | NotifyFilters.Attributes | NotifyFilters.Size; 
w.IncludeSubdirectories = true; 
w.Changed += watcher_Changed; 
w.Created += watcher_Created; 
w.Renamed += watcher_Renamed; 
w.Deleted += watcher_Deleted; 
w.EnableRaisingEvents = true;