2017-11-17 3 views
0

here, herehere으로 연결되는 링크를 보내기 전에..NET Core 2.0을 사용하여 Windows에서 파일의 변경 사항을 모니터링하십시오.

주어진 파일 세트의 변경을 모니터링하는 서비스를 작성하고 싶습니다. 내 POC를 계속 진행하기 위해 디렉토리를 모니터링하는 콘솔 애플리케이션을 작성하는 가장 간단한 방법부터 시작했습니다. 그러나, 나는 실제 변화를 추출하려고 노력 중이다. (예, 나는 FileSystemWatcher 클래스에서 이벤트를 처리 할 수 ​​있었지만 클래스의 API를 보면 실제 변경 사항을 추적 할 수 없습니다.

이렇게 할 수있는 방법이 있는지 알고 계십니까? 고통이나 불필요한 수술없이

현재 .NET Core 2.0을 사용하고 있지만 .NET Core의 모든 버전에서 사용할 수 있습니다.

EDIT : 모니터링해야하는 파일은 텍스트 기반이며 기본적으로 git diff 기능을 구현하고 변경 사항을보고하고자합니다.

+2

파일에 어떤 종류의 "변경"이 있습니까? 바이너리 파일입니까 아니면 일반 텍스트입니까? "teh"를 "the"로 변경하는 것은 이진 파일의 중간에서 001010을 110101로 변경하는 것과 다릅니다. 음, 가장 낮은 수준에서 그렇지는 않지만 정교해야합니다. – Patrick

+2

좋은 점은 텍스트 기반 파일에 대해서만 이야기하고 있으므로 변경 사항은 나중에 적용될 것입니다. 관련 변경 사항 만 추적 할 수있는 방법을 구현하기를 원할 수도 있지만 지금은 파일 변경 방법을보고 싶습니다. 정확하게 git diff가하는 것처럼) – kuskmen

+0

https://jeremylindsayni.wordpress.com/2016/04/10/how-to-use-the-filesystemwatcher-in-c-to-report-file-changes-on에서 보셨나요? -disk/ – Patrick

답변

3

짧은 대답은 아니오입니다. 파일의 어느 부분이 수정되었는지 알려주는 API는 없습니다. OS에서 얻을 수있는 모든 것은 변경 내용이 파일에 발생했음을 나타내는 것이지 FileSystemWatcher에서 얻은 것 이상의 변경 사항의 특성이나 위치가 아닙니다.

변경 내용을 확인하려면 변경 전후의 파일 내용을 비교할 수 있어야합니다. 대부분의 경우 파일의 이전 상태에 액세스 할 수 없습니다. 쉐도우 복사본을 사용하여 파일의 이전 상태에 액세스 할 수 있지만 그 자체의 문제가 있습니다.

소수의 파일 만 모니터링하는 경우 변경 사항의 위치를 ​​감지하기 위해 일종의 지문 인식 (예 : 블록 수준 해싱)을 수행 할 수 있습니다. 특정 변경 사항을 감지하기 위해서는 이전과 이후가 필요합니다. 말했다

은 ...

실제로 디스크에 데이터를 기록하는 데 사용되는 윈도우의 API에 후크 원칙적으로 가능하다. 나는 .NET에서 이것을 시도하지 않았지만 비슷한 일을하기 위해 과거에는 Detours을 사용했다. API 후킹은 위험한 영역이며, 잘못하면 컴퓨터를 죽일 수 있습니다. 여기는 용 이예요. 이 길을 가고 싶다면 지연을 최소화하기 위해 코드를 작성하는 것이 좋습니다.