2011-12-15 5 views
1

모든 파일 조작 (추가/제거/이름 변경)을 위해 폴더와 하위 디렉토리를 모니터해야합니다. 필자는 FileSystemWatcher에 대해 읽었지만 프로그램이 실행될 때마다 또는 사용자가 "변경 사항 확인"버튼을 누를 때마다 변경 사항을 모니터링하고 싶습니다. FSW는 런타임 감지에 더 중점을 두었습니다. 내 첫 번째 생각은 모든 (하위) 디렉토리를 반복하고 각 파일을 해시하는 것입니다. 그런 다음 모든 해시 (순서가 지정된)와 해시를 연결합니다. 변경 사항을 확인하려면 프로세스를 반복하고 해시가 동일한 지 확인하십시오.디렉토리의 변경 감지

효율적인 방법입니까? 또한 변경 사항을 감지하면 가능한 빨리 파일을 추가, 제거 또는 이름을 변경했는지 어떻게 알 수 있습니까?

부수적으로, 최종 사용자가 아무 것도 설치하지 않아도되며 스크립트가 내 C# 앱에 변경 사항을 알릴 수있는 한 스크립트가 더 빠르면 스크립트를 사용하면 신경 쓸 필요가 없습니다.

+0

나는 당신이하고 싶은 일과 정확히 FileSystemWatchner가 필요로하는 것을 혼동합니다. – kenny

+0

AFAIK, FSW는 프로그램이 종료되고 다시 켜질 때까지 파일 변경을 감지하지 않습니다. – XSL

답변

2

우리는 모든 발견 된 파일을 마지막 수정 시간과 함께 데이터베이스에 저장함으로써이 문제를 처리합니다.

파일을 통과 할 때마다 각 파일에 대한 데이터베이스를 확인합니다. DB에없는 경우 새로운 것이므로 존재하지만 시간 소인이 다른 경우 변경되었습니다.

데이터베이스에있는 모든 파일을 전달 전에 ToBeDeleteed로 표시하고 파일을 찾은 경우 지워서 삭제 된 파일을 처리하는 옵션도 있습니다. 그런 다음 프로세스가 끝나면 ToBeDeleted로 표시된 모든 레코드를 삭제할 수 있습니다.

2

분명히 디렉토리 트리의 "스냅 샷"을 만들어 필요에 따라 비교해야합니다. 스냅 샷에 정확히 들어가는 것은 요구 사항에 따라 다릅니다.

  • 당신은 파일이 가지고 또는 가지고
  • 파일 크기를 감지 "새로운"및 "삭제"파일하기 위해 마지막으로 수정 된 시간에 파일 이름을 저장해야 좋은 저렴한 표시됩니다 것을 명심하십시오 변경되지는 않지만 보증을 제공하지 않습니다.
  • 파일의 내용을 해싱하는 것은 파일이 클 수있는 경우 엄청나게 비쌀 수 있지만 완벽에 가까운 정도의 정확도로 변경되었음을 알 수있는 유일한 방법입니다 (해시 또한 충돌 할 수 있습니다. 따라서 수학적으로 100 % 확실성을 보장한다면 충분하지 않을 수도 있습니다.)