2011-12-23 3 views
2

C# 및 .NET을 사용하여 디렉토리에서 새롭고 수정 된 파일을 찾는 가장 신뢰할 수있는 방법을 찾으려고합니다. 나는 실시간 솔루션을 찾고 있지 않다. 주어진 시간에 변경 사항을 확인하고 싶다. 그것은 매 5 분마다 또는 매시간 일 수 있습니다.정기적으로 .NET을 사용하여 디렉토리의 변경된 파일 찾기

우리는 FileInfo 객체에 CreationTime과 LastWriteTime을 가지고 있으며 이것은 새롭고 수정 된 파일을 얻는 것으로 보입니다. 그러나 파일의 이름이 변경되면 사용 가능한 날짜 중 아무 것도 변경되지 않으며 CreationTime 및 LastWriteTime을 보면 파일이 손실됩니다.

현재 내가 마지막으로 변경 사항을 확인한 시간을 포함하여 디렉토리에있는 파일의 "스냅 샷"을 유지하고 있습니다. 이렇게하면 디렉토리의 모든 파일을 스냅 샷의 파일과 비교할 수 있습니다. 스냅 샷에 파일이 없거나 새 파일이거나 이름이 바뀐 파일이없는 경우

유일한 방법입니까? 나는 뭔가를 놓치고있다. 꽤 "버그가있는"것처럼 보이는 FileSystemWatcher를 사용하지 않을 것이며 항상 실행해야합니다.

모든 의견을 환영합니다.

메리 크리스마스!

+0

솔직히 말해서, 당신이 기본적으로 올바른 방식으로 진행하고 있다고 생각합니다. :) –

+0

'FileSystemWatcher'는 이벤트 중심입니다. 그것이 당신이 생각하고있는 것이라면 투표하지 않습니다. – Yuck

답변

1

Microsoft Sync Framework에는 synchronising files에 대한 구성 요소가 있습니다.

프레임 워크는 모든 데이터 유형과 데이터 저장소를 다루며 파일 시스템 구성 요소는 FileSystemWatcher보다 더 안정적이어야합니다. MSDN에서 말한대로 :

NTFS, FAT 또는 SMB 파일 시스템에서 파일과 폴더를 동기화하는 데 사용할 수 있습니다. 동기화 할 디렉토리는 로컬 또는 원격 일 수 있습니다. 동일한 파일 시스템 일 필요는 없습니다. 응용 프로그램은 정적 필터를 사용하여 명시 적으로 또는 와일드 카드 문자 (예 : * .txt)를 사용하여 파일을 제외하거나 포함 할 수 있습니다. 또는 전체 하위 폴더를 제외하는 필터를 설정할 수 있습니다. 응용 프로그램은 또한 파일 동기화 진행에 대한 알림을받을 등록 할 수 있습니다

난 당신이 정말 파일 만 변경 한 경우 알고 싶어하지만, (이미가 신뢰할 수있는 유일한 경로가 될 수있는 FileSystemWatcher 경로를 기각했습니다 주어진 알고 자신을 스냅 샷으로 유지하는 것 이외에).

+0

Chris, 나는 Sync Framework를 고려해 봤지만 틀린 것이 아니라면 폴더 쌍이되어야합니다. 맞습니까? 나는 변화를 감지하는 방법을 찾고있다. Sync Framework를 사용하여이 작업을 수행 할 수 있습니까? –

+0

@ChristianSparre - 확실하지 않습니다. 필자는 두 개의 복사본이 필요한 데이터베이스를 동기화하는 데만 사용했음을 인정해야합니다. – ChrisF

+0

이것은 파일 동기화 (__propagating__ 변경)에 관한 것으로 보이지만 변경이 이루어질 때 __tracking *에 관한 것이 아닙니다. – Adam

6

FileSystemWatcher 클래스를 사용하면 좋은 방법입니다. 은 FileSystemWatcher는 renaming events를 지원하지 않습니다 : 그것은

편집 꽤 "버그"보인다 어쩌면 당신은

더 구체적으로 할 수있다.

+2

OP는 구체적으로 그가 실시간을 필요로하지 않으며 FileSystemWatcher 클래스를 사용하고 싶지 않다고 언급했습니다. 그러나 당신이 그때해야한다고 생각한다면 ** 그것이 ** 문제를 해결할 것이라고 설명 할 필요가 있습니다. – ChrisF

+3

FileSystemWatcher가 항상 실행되고 있지 않습니다. 그것은 이벤트를 기다리고 있습니다. FileSystemWatcher가 시작되면 Windows OS에 지정된 파일 또는 디렉토리의 파일 이벤트에 대한 정보를 요청합니다. 파일 작업이 발생하면 Windows는 지정한 파일 패턴을 검사하고 일치하는 경우 FileSystemWatcher 이벤트가 발생합니다. –

+1

이것이 올바른 방법입니다 **. 버그에 대한 코멘트는 아마 클래스에 대한 경험이 부족하기 때문에 생깁니다. – Yuck

1

문제는 기본 키가없는 데이터베이스와 매우 비슷합니다.

해당 폴더의 각 파일에 GUID를 할당하고 파일 이름 대신 해당 GUID를 확인하면 응용 프로그램의 안정성이 훨씬 높아집니다.

실제로이 이론은 메타 데이터를 말하는 것입니다. 시스템 및 해당 폴더에 포함 된 파일에 따라 Alternate Data Streams을 사용할 수 있습니다.

Here에 대한 의문점이 있습니다.

파일에 저장되지 않은 파일에 대한 정보를 가지고 있기 때문에 파일에 링크되어 있습니다.
그런 다음 DOS 상자를 찾아 볼 수 있습니다 :

notepade.exe myfile.txt:MYGUID 

그것은 NTFS를 사용하는 시스템이 필요합니다.

HTH. .NET에서

0

파일 시스템 감시자 클래스는 두 가지 방법을 제공합니다 : -

  1. 당신은 true로 EnableRaisingEvents를 설정하고 즉

을 OnRenamed는 onChanged !!!! 닷 넷 진정으로 모든 것이 간단합니다!

관련 문제