이 문제를 해결하는 가장 좋은 방법은 무엇입니까?C# - 폴더 삭제시 파일 시스템 이벤트 예측
나는 파일 및 폴더의 사용자 변경 사항을 알려주는 FileSystemWatcher
입니다. 또한 하위 디렉토리도 감시됩니다. 동일한 디렉토리에서 내 프로그램이 때때로 변경됩니다. FileSystemWatcher
에서 이러한 프로그램 변경에 대한 이벤트를 검색하지 않으려합니다.
첫 번째 구현은 예상 이벤트를 추가 할 수있는 목록이었습니다. 파일 시스템 이벤트가 발생하면 목록을 확인한 후 목록을 무시합니다. 이것은 매우 강력하게 들리지는 않지만 작동하는 것처럼 보입니다.
이제 실제 문제가 발견되었습니다.
D :는 (은) FileSystemWatcher
입니다.
다음과 같은 두 개의 폴더가 있습니다. D : \ folder1 \ folder2
이제 응용 프로그램과 함께 folder1 (folder2 포함)을 삭제하려고합니다. 그래서 D : \ folder1을 삭제 목록에 넣습니다. 그런 다음 Directory.Delete(@"D:\folder1", true)
과 같은 것을 호출합니다. 이제 folder1을 예외로 삭제할 수 없음을 알았습니다. 내 목록에서 삭제 항목을 제거하지만 folder2는 이미 삭제되었고 그의 FileSystemEvent를 얻습니다. 그래서 D : \ folder1 \ folder2에 대한 FileSystem 이벤트를 얻습니다. 내 프로그램은 이제 사용자가이 폴더를 삭제하고 잘못된 일을하고 있다고 생각합니다.
1.) 재귀 적으로 그 자체로 모든 파일과 모든 폴더를 삭제하여 폴더를 삭제합니다. 이것으로 모든 하위 폴더에 들어가서 자신의 목록 항목을 제출합니다. 이미 구현했지만 매우 느리다.
2.) 내 목록을 쓸모 없게 만들려면 FileSystemWatcher
에 영리한 필터를 사용하는 것이 더 좋은 방법 일 수 있습니까?
3) 모든 것을 삭제할 수있는 경우에만 디렉토리 트리 만 삭제할 수 있습니다. 그래서 실패하면 나는 모든 것을 가지고 있으며 모든 것이 삭제되지 않는다면. 이것은 나를위한 가장 우아한 해결책 인 것처럼 보이지만 이것이 가능할 지 아무 생각도하지 않습니까?
4.) 소프트웨어로 모든 파일과 폴더를 독점적으로 잠글 수 있습니까? 이게 괜찮 았으면 한 번만 삭제 명령으로 삭제할 수 있어야합니다.
다른 추가 솔루션을 이용할 수 있습니다.
편집 1은 좀 더 명확하게하기 :
난 단지 폴더에 사용자 작업 "을 참조하십시오"하고 싶다. 여기에서 내 프로그램의 것들을 조작한다면 나는이 사건을보고 싶지 않다.
폴더가 잠겨서 삭제할 수없는 경우 하위 폴더에 대한 이벤트가 생깁니다.
나는 영어가 모국어가 아니기 때문에 영어로 설명하기가 쉽지 않습니다.).
편집 2 :
5.) 어쩌면 정의 된 프로세스에서 FileSystemWatcher
의 모든 이벤트를 필터링 할 수 있습니다?
물건을 예측하는 데있어 당신의 질문은 어디에 있습니까? –
필자가 작성한 목록은 나중에 FileSystemWatcher에서 가져와야하는 예상 이벤트가 포함되어 있기 때문에 예측입니다. 그것은 이렇게 작동합니다 : 1.) 목록에서 기억 2.) 파일/폴더 조작 3.) 목록으로 이벤트 무시 – fpdragon
진지하게, 나는 이것을 얻지 못하고 있습니다. 어떤 사건이 예상됩니까? 대신에 어떤 사건이 있습니까? 어떤 예외가 있습니까? 이 점들로 질문을 업데이트하십시오. –