2016-07-19 4 views
0

C#에서 프로그램을 작성하고 프로그램에서 파일을 읽었으며 파일의 내용이 변경되면 OnFileChanged 메서드가 시작됩니다. 그리고 그것은 작동합니다. 하지만 지금은 내 파일에있는 정확한 새 줄을 가져오고 싶습니다. 그래서 나는 새로운 줄이있는 문자열을 가지고있을 것입니다. 파일에는 새로운 줄만 올 수 있습니다.정확한 파일 변경 받기 C#

이 작동 나의은 FileSystemWatcher입니다 :

FileSystemWatcher fileWatcher = new FileSystemWatcher(); 
    fileWatcher.Path = Path.GetDirectoryName(filePath); 
    fileWatcher.Filter = Path.GetFileName(filePath.Split(backslashSeperator).Last()); 
    fileWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName; 
    fileWatcher.Changed += new FileSystemEventHandler(OnFileChanged); 
    fileWatcher.EnableRaisingEvents = true; 

을이 내 OnFileChanged 방법 :

public static void OnFileChanged(object source, FileSystemEventArgs e) { 

} 

가 지금은 아마 내 파일의 정확한 라인 변경 문자열을 갖고 싶어.

답변

1

FileSystemWatcher API는 이전 버전의 파일을 제공하지 않습니다.

파일의 마지막 상태를 어딘가에 저장하고 다음에 변경하면 Text Difference Algorithm을 따라 2 세트 간의 차이를 가져와야합니다.

1

나는 이것이 직접 가능하지 않다고 생각한다. 이벤트에 의해 파일 시스템에서 변경되는 파일이 프로그램에 통지됩니다. 파일 시스템은 변경된 특정 행을 확인하지 않습니다. 결국 : 변경된 파일은 바이너리 파일, 이미지, zip 파일 등일 수 있습니다.

이러한 논리는 직접 구현해야합니다. 어딘가에 파일 사본을 작성한 다음 Change 이벤트를 받으면 백업 사본을 실제 파일과 비교하여 변경 사항을 계산하십시오.

또는 어쩌면 당신은 git에 내장처럼 약간은 diff 도구를 사용하여,하지만 난 당신이 원하는 무엇

0

은은 FileSystemWatcher 불가능 : 그렇게하는 방법을 모르겠어요. 파일 시스템 필터 드라이버를 사용하면 모든 파일 쓰기 요청을 캡처하고 실제로 수행되기 전에 작업에 대해 알릴 수 있습니다.